Daily updates from Odoo
Tuesday, June 17, 2025
27 changes · master
Enhancements to existing features
Creating a maintenance request from a manufacturing order is now accessed through the cog menu instead of a dedicated button. This keeps the form cleaner while preserving the same action for users who need it.
Original PR description
Move the button for creating a maintenance request in the MO form view to the cog menu. Task ID: [4412425](https://www.odoo.com/odoo/my-tasks/4412425)
The Time Off overview dialog no longer shows an expand button because expanding it displayed the same information. This simplifies the interface and avoids a redundant action for users reviewing time off details.
Original PR description
This commit removes the expand button on the form dialog of the time off overview. The expand button is not necessary as axpanding the dialog shows exactly the same information. task-4784553
The barcode demo sheets were adjusted so 'Put in Pack' barcodes stay grouped under the correct section header. This makes the printed reference sheets clearer and more consistent for warehouse users scanning demo barcodes.
Original PR description
The 'Put in Pack' barcodes in the Code 128 section of the barcode demo sheet were moved from the bottom of the first page to the top of the second page. The Code 128 and Data Matrix pages have the same dimensions now. Task ID: [3981936](https://www.odoo.com/odoo/project/966/tasks/3981936)
This update removes older custom date and time field components in favor of the standard Odoo date/time field options. This keeps Sign and Appraisals easier to maintain while preserving the same user-facing behavior for showing dates, times, or seconds.
Original PR description
sign: Remove the unused datetime_no_seconds widget
---------------
The datetime widget now supports hiding seconds, as introduced in the following commit: https://github.com/odoo/odoo/commit/0f694c84c271d33e3faa1eba0bc554ee054c7e6c
https://github.com/odoo/enterprise/commit/ef6d3e123dc416251f94c3f3d65dd4a19924e8c8
In the above commit, the usage of datetime_no_seconds was replaced with the option {'show_seconds': false}.
As a result, the datetime_no_seconds widget is no longer needed. Therefore, I have removed it in this commit.
hr_appraisal: use datetime instead of timeless_datetime
--------------
The datetime widget now supports the show_time option. commit-https://github.com/odoo/odoo/commit/c775c89173784cace1178e1f9c66e4fb19f530ad
Therefore, in this commit, we use the standard datetime widget with {'show_time': False}.The custom widget has been removed as it's no longer necessary.
task-4826302The barcode app now uses clearer wording for inventory counting screens. Renaming “Inventory Count” to “Count Inventory” and “Inventory Adjustments” to “Physical Inventory” helps users better understand the workflow and keeps labels consistent.
Original PR description
- Renamed the button 'Inventory Count' to 'Count Inventory'. - Updated the title from 'Inventory Adjustments' to 'Physical Inventory' inside Count Inventory. These changes help users better understand the purpose and improve the overall consistency of the barcode interfaces. Task ID: 4526266
The portal address form no longer shows the UPS Account Number field by default. This simplifies address entry for customers and avoids displaying a carrier-specific option when UPS is not relevant or enabled.
Original PR description
The 'UPS Account Number' field was always visible on the portal user's address form, regardless of context. Introduced 5 years ago with 10892c12c62fb7d82ed55f53ffe3815298b89018, it was recently moved from `website_sale_ups` to `delivery_ups`, as it was used in the core delivery logic, not only the ecommerce one. Nevertheless, it has been considered unnecessary to keep it on the portal form, as it is displayed and chosen when necessary in the e-commerce checkout flow). Furthermore, this field was shown regardless of whether the ups carrier was enabled and published (or was ever used by the current customer). We remove it for now to simplify the default address form (and runbot form). If needed, we'll consider re-introducing it in the future (but with additional restrictions). task-4669485
The online shop rental date picker no longer shows an extra month, making date selection clearer for customers. This improves the buying and renting flow by reducing visual clutter and potential confusion during checkout.
Original PR description
task-4613140
Code cleanup and technical improvements
This update renames IoT driver and interface files to follow standard Python naming conventions. It is an internal cleanup that improves consistency and maintainability without changing user-facing behavior.
Original PR description
Drivers/interfaces files were still named using CamelCase instead of python standard snake_case. This commit fixes it. Community PR: odoo/odoo#208295
The website builder action system was reorganized to use a more consistent structure across appointment, rental, and studio features. This is mainly an internal improvement that makes future enhancements easier and helps keep behavior more reliable over time.
Original PR description
*: website_sale_renting, website_studio Previously, builder actions were defined as plain objects with apply/isApplied/getValue properties. This commit introduces a class-based system where each builder action extends the BuilderAction base class. Improvements include: - Support instantiated objects, and legacy object-style actions. - Greater consistency, encapsulation, and extensibility for action logic. This refactor simplifies action management and prepares the system for further enhancements like shared base logic.
Miscellaneous changes
Steps to reproduce: 1. Install the german localization 2. Create company in DE 3. Create a partner that has country = PL 4. Create a customer invoice for the PL partner 5. Open: Accounting > Reporting > EC Sales List 6. Hit the wheel and create the CSV export. 7. Open the file Issue: see that the amount is a float Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4575788) opw-4575788 Forward-Port-Of: odoo/enterprise#87421 Forward-Port-Of: odoo/enterprise#83822
Original PR description
Steps to reproduce: 1. Install the german localization 2. Create company in DE 3. Create a partner that has country = PL 4. Create a customer invoice for the PL partner 5. Open: Accounting > Reporting > EC Sales List 6. Hit the wheel and create the CSV export. 7. Open the file Issue: see that the amount is a float Ticket [link](https://www.odoo.com/odoo/project/967/tasks/4575788) opw-4575788 Forward-Port-Of: odoo/enterprise#87421 Forward-Port-Of: odoo/enterprise#83822
Community PR: odoo/odoo#212157 Forward-Port-Of: odoo/enterprise#86650
Original PR description
Community PR: odoo/odoo#212157 Forward-Port-Of: odoo/enterprise#86650
[FIX] l10n_au_hr_payroll_account: avoid NewId warning in compute steps to reproduce: 1.install l10n_au_hr_payroll_account 2. without demo data 3. run the test test_form_new_record The compute method was being triggered too early, while the record still had a temporary NewId and not a real database ID. This caused a warning when using the field in a domain: Domains don't support NewId. We added a dependency on previous_report_id to make sure the compute only runs after the field is s
Original PR description
[FIX] l10n_au_hr_payroll_account: avoid NewId warning in compute steps to reproduce: 1.install l10n_au_hr_payroll_account 2. without demo data 3. run the test test_form_new_record The compute method was being triggered too early, while the record still had a temporary NewId and not a real database ID. This caused a warning when using the field in a domain: Domains don't support NewId. We added a dependency on previous_report_id to make sure the compute only runs after the field is set and the record is saved. This avoids the warning and keeps the logs clean. build_error-115303 Forward-Port-Of: odoo/enterprise#85292
When exploding a BoM that includes phantom (kit) components, the resulting list of components moves was not respecting the sequence order defined in the BoM. Steps to reproduce: - Create a product P1 with a BoM that includes: - Component 1 (sequence = 1) - Component 2 - KIT (sequence = 2), which itself contains: - Component 2-1 (sequence = 1) - Component 2-2 (sequence = 2) - Component 3 (sequence = 3) - Create a Manufacturing Order for P1. Observed behavior: - The
Original PR description
When exploding a BoM that includes phantom (kit) components, the resulting list of components moves was not respecting the sequence order defined in the BoM. Steps to reproduce: - Create a product P1…
When exploding a BoM that includes phantom (kit) components, the resulting list of components moves was not respecting the sequence order defined in the BoM.
Steps to reproduce:
- Create a product P1 with a BoM that includes:
- Component 1 (sequence = 1)
- Component 2 - KIT (sequence = 2), which itself contains:
- Component 2-1 (sequence = 1)
- Component 2-2 (sequence = 2)
- Component 3 (sequence = 3)
- Create a Manufacturing Order for P1.
Observed behavior:
- The generated stock moves are ordered as:
1. Component 1
2. Component 3
3. Component 2-1
4. Component 2-2
Expected behavior:
- The stock moves should respect the BoM line sequence:
1. Component 1
2. Component 2-1
3. Component 2-2
4. Component 3
Root cause:
- When exploding phantom BoMs, child lines were appended at the end of the processing queue, causing out-of-order moves:
https://github.com/odoo/odoo/blob/d64b108db54c02098c9e95f58fa3278007c92642/addons/mrp/models/mrp_bom.py#L416-L418
https://github.com/odoo/odoo/blob/d64b108db54c02098c9e95f58fa3278007c92642/addons/mrp/models/mrp_bom.py#L430
Solution:
- Insert the child BoM lines at the beginning of the processing queue (`bom_lines`), sorted by their sequence field, to ensure correct processing order.
opw-4809095
Forward-Port-Of: odoo/enterprise#87003Users can upload request documents from the kanban and the activity views. This commit extends this feature to the list view. task-4745800 Forward-Port-Of: odoo/enterprise#84518
Original PR description
Users can upload request documents from the kanban and the activity views. This commit extends this feature to the list view. task-4745800 Forward-Port-Of: odoo/enterprise#84518
- Remove useless leading zero char inside blackbox order's ticket_number. - When pushing data to blackbox we now use `keepCommands` set to true. When we serialize data in order to send it for the blackbox we won't apply the returned ORM commands, so we want to keep the data `dirty` so the next serializatin still return the commands for the ORM to execute in order to have a correct synchronization. community PR: https://github.com/odoo/odoo/pull/213361 task-id: 4848882 Forward-Port-Of: od
Original PR description
- Remove useless leading zero char inside blackbox order's ticket_number. - When pushing data to blackbox we now use `keepCommands` set to true. When we serialize data in order to send it for the blackbox we won't apply the returned ORM commands, so we want to keep the data `dirty` so the next serializatin still return the commands for the ORM to execute in order to have a correct synchronization. community PR: https://github.com/odoo/odoo/pull/213361 task-id: 4848882 Forward-Port-Of: odoo/enterprise#87193
Steps to reproduce the bug: - Create a storable product “P1” - Create a delivery order with one unit of P1, not linked to any sale order - Go to the delivery order list view - Select the created delivery order - Click on Action → Fetch shipping label Problem: A traceback is triggered: ``` ValueError: ValueError('Expected singleton: shopee.shop()') while evaluating 'records._fetch_shipment_label()' The above server error caused the following client error: ``` The `_fetch_s
Original PR description
Steps to reproduce the bug:
- Create a storable product “P1”
- Create a delivery order with one unit of P1, not linked to any sale order
- Go to the delivery order list view
- Select the created delivery order
- Click on Action → Fetch shipping label
Problem:
A traceback is triggered:
```
ValueError: ValueError('Expected singleton: shopee.shop()') while
evaluating
'records._fetch_shipment_label()'
The above server error caused the following client error:
```
The `_fetch_shipment_label` function expects at least one item, but
we don't check it via a user error, because we're supposed to call
`_sync_shopee_pickings` instead, where all these filtering and checks
are done
opw-4812360
Forward-Port-Of: odoo/enterprise#86442Added compatibility with Estonia tax report version KMD6 that is valid from 1. July 2025. For technical info please see: https://www.emta.ee/en/business-client/e-services-training-courses/how-use-e-services/technical-information-services#value-added-tax-return Forward-Port-Of: odoo/enterprise#87547 Forward-Port-Of: odoo/enterprise#84306
Original PR description
Added compatibility with Estonia tax report version KMD6 that is valid from 1. July 2025. For technical info please see: https://www.emta.ee/en/business-client/e-services-training-courses/how-use-e-services/technical-information-services#value-added-tax-return Forward-Port-Of: odoo/enterprise#87547 Forward-Port-Of: odoo/enterprise#84306
To reproduce: - As demo user, create a new sign template - Get the share url and open it in a new private window - Fill the document fields - Click on 'Validate and Send Complete Document' * enter your name and email * click on `Validate and Send` button Here nothing happen, while on server side an `AccessError` is loggued. Since https://github.com/odoo/odoo/pull/201565 we need to get new request item access_token as superuser (user who created the template might not the sufficie
Original PR description
To reproduce: - As demo user, create a new sign template - Get the share url and open it in a new private window - Fill the document fields - Click on 'Validate and Send Complete Document' * enter your name and email * click on `Validate and Send` button Here nothing happen, while on server side an `AccessError` is loggued. Since https://github.com/odoo/odoo/pull/201565 we need to get new request item access_token as superuser (user who created the template might not the sufficient rights to access it) Forward-Port-Of: odoo/enterprise#87769
Currently, employees managers with no access rights are not allowed to create a new appraisal concern for their employees. To grant managers the access to create appraisal campaigns, new customized access rule for employees' managers has been created. Also, both the Kanban and List views have been modified so that only the managers can see the "Launch Campaign" button. Forward-Port-Of: odoo/enterprise#86606
Original PR description
Currently, employees managers with no access rights are not allowed to create a new appraisal concern for their employees. To grant managers the access to create appraisal campaigns, new customized access rule for employees' managers has been created. Also, both the Kanban and List views have been modified so that only the managers can see the "Launch Campaign" button. Forward-Port-Of: odoo/enterprise#86606
As the cron generating the returns is scheduled every 3rd of the month, It might be usefull to call it manually on installation. This way the users won't have until the next call to get their returns generated. Forward-Port-Of: odoo/enterprise#87749
Original PR description
As the cron generating the returns is scheduled every 3rd of the month, It might be usefull to call it manually on installation. This way the users won't have until the next call to get their returns generated. Forward-Port-Of: odoo/enterprise#87749
A `ValueError` occurs when we set and remove values `Default Group By` in terminal when you click the cross button multiple times the view gets stuck in infinite loading screen. **Steps to reproduce:** * Install `web_studio` and `inventory` with demo data * Inventory>Toggle Studio button>View * Select any value in `Default Group By` and remove it using cross button. `ValueError: Invalid field 'None' on model 'stock.picking.type'` **Solution:** * The Javascript is passing null value
Original PR description
A `ValueError` occurs when we set and remove values `Default Group By` in terminal when you click the cross button multiple times the view gets stuck in infinite loading screen. **Steps to reproduce:** * Install `web_studio` and `inventory` with demo data * Inventory>Toggle Studio button>View * Select any value in `Default Group By` and remove it using cross button. `ValueError: Invalid field 'None' on model 'stock.picking.type'` **Solution:** * The Javascript is passing null value instead we pass an empty string. **Sentry-6618531530** Forward-Port-Of: odoo/enterprise#86206
…t mail should do Before this commit, in the reportEditor, add a field (by typing "/") There was calls made to the server that are not necessary for the report editor. This commit removes the calls by overriding the corresponding method. opw-4815802 Forward-Port-Of: odoo/enterprise#87718 Forward-Port-Of: odoo/enterprise#87425
Original PR description
…t mail should do Before this commit, in the reportEditor, add a field (by typing "/") There was calls made to the server that are not necessary for the report editor. This commit removes the calls by overriding the corresponding method. opw-4815802 Forward-Port-Of: odoo/enterprise#87718 Forward-Port-Of: odoo/enterprise#87425
When generating the accounting entry from the Corporate Tax Report, the system first tries to find a miscellaneous journal with the short code `MISC`. If this specific journal does not exist, the logic attempts to fall back and find any other journal of type 'Miscellaneous' (`type = 'general'`). However, this fallback search fails with an error due to an incorrect search domain syntax. Steps to reproduce: 1. Go to Accounting > Configuration > Journals. 2. Ensure no journal exists with th
Original PR description
When generating the accounting entry from the Corporate Tax Report, the system first tries to find a miscellaneous journal with the short code `MISC`. If this specific journal does not exist, the logic attempts to fall back and find any other journal of type 'Miscellaneous' (`type = 'general'`). However, this fallback search fails with an error due to an incorrect search domain syntax. Steps to reproduce: 1. Go to Accounting > Configuration > Journals. 2. Ensure no journal exists with the short code MISC. 3. Ensure at least one other journal of type "Miscellaneous" exists (for example, with short code GEN or MSC). 4. Go to Accounting > Reporting > Corporate Tax Report. 5. Try to generate the accounting entry. opw-4836686 Forward-Port-Of: odoo/enterprise#87300
Currently, a raceback occurs when the user changes or adds the expression label of the column in the "Generic Tax report". **To reproduce this issue:** 1) Install "account_reports" 2) Open "Generic Tax report" from "Accounting Reports" 3) In columns change the "Expression Label" and save the record 4) Open the "Tax Report" in "Reporting" 5) A traceback occurs **Error:** ``` UnboundLocalError: local variable 'col_value' referenced before assignment ``` **Cause:** The "co
Original PR description
Currently, a raceback occurs when the user changes or adds the expression label of the column in the "Generic Tax report". **To reproduce this issue:** 1) Install "account_reports" 2) Open "Generic Tax report" from "Accounting Reports" 3) In columns change the "Expression Label" and save the record 4) Open the "Tax Report" in "Reporting" 5) A traceback occurs **Error:** ``` UnboundLocalError: local variable 'col_value' referenced before assignment ``` **Cause:** The "col_value" is assigned based on the "expr_label" if it doesn't match the if conditions it leads to a traceback. https://github.com/odoo/enterprise/blob/d154cbf1bd5b4cc104ff0e2443047aff0c05330f/account_reports/models/account_generic_tax_report.py#L921-L932 **Solution:** This commit will resolve this issue by assigning a fallback value of an empty string to col_value. opw-4841789 Forward-Port-Of: odoo/enterprise#87277
Currently, the issue occurs when opening the achievement **Details** view from the commission report due to missing IDs in the view. **Steps to reproduce:** - Install the `sale_commission` module. - Create and approve a new **Commission Plan**. - Click the **Commissions** button on the form view. - From the list view, click the **Details** button for a commission entry. - Observe the error. **Error:** `ValueError: Expected singleton: sale.commission.report()` Here, an error is tri
Original PR description
Currently, the issue occurs when opening the achievement **Details** view from the commission report due to missing IDs in the view. **Steps to reproduce:** - Install the `sale_commission` module. -…
Currently, the issue occurs when opening the achievement **Details** view from the commission report due to missing IDs in the view. **Steps to reproduce:** - Install the `sale_commission` module. - Create and approve a new **Commission Plan**. - Click the **Commissions** button on the form view. - From the list view, click the **Details** button for a commission entry. - Observe the error. **Error:** `ValueError: Expected singleton: sale.commission.report()` Here, an error is triggered because the `action_achievement_detail` method at [1], expects a single `id` on the `sale.commission.report` record. However, when the commission report list loads, the `_table_query` method executes a SQL query - [2]. If any of `era.plan_id`, `u.user_id`, or `era.date_from` are **NULL**, the resulting id becomes `False`, which causes the singleton error when the user tries to open the details view. [1] - https://github.com/odoo/enterprise/blob/4575d3dfdbd0ccd9bf57bddbd35a89bd47c48798/sale_commission/model/commission_plan.py#L174-L175 [2] - https://github.com/odoo/enterprise/blob/4575d3dfdbd0ccd9bf57bddbd35a89bd47c48798/sale_commission/report/commission_report.py#L111 This commit produces a valid, non-null ID, preventing the downstream error. Sentry - 6587805735 Forward-Port-Of: odoo/enterprise#87304 Forward-Port-Of: odoo/enterprise#84785
In this commit: ------------ - We are fixing the unknown key "test" runbot error. runbot error-226611 Forward-Port-Of: odoo/enterprise#87482
Original PR description
In this commit: ------------ - We are fixing the unknown key "test" runbot error. runbot error-226611 Forward-Port-Of: odoo/enterprise#87482
#Description A total of 6 test were broken after changes(add/removal) in the accounts of the mexican localization in odoo community, the new expected values for the assesments were updated. Related PR #196852. Forward-Port-Of: odoo/enterprise#87238 Forward-Port-Of: odoo/enterprise#81270
Original PR description
#Description A total of 6 test were broken after changes(add/removal) in the accounts of the mexican localization in odoo community, the new expected values for the assesments were updated. Related PR #196852. Forward-Port-Of: odoo/enterprise#87238 Forward-Port-Of: odoo/enterprise#81270