Daily updates from Odoo
Wednesday, August 13, 2025
13 changes · master
Enhancements to existing features
Brazilian AvaTax NCM code records now require both a code and a clear name, reducing duplicate or confusing entries. Dropdown searches and displays are cleaner, and the form layout has been refreshed for easier maintenance.
Original PR description
This model was readonly without any views when it was originally created [1]. We forgot to add the correct constraints, and we duplicated the code inside the name field to avoid overwriting display_name and having to add a _rec_name_search. This commit fixes those issues. First of all, we require both the code and name field. Second of all, we remove the code from the name field and modify display_name and _rec_name_search accordingly. To not have identical display names in a dropdown, we also add a unique constraint on the combination of name and code. It's possible to have multiple identical NCM codes with different EX values, but in those cases the user should give them unique names. We also take the opportunity to put the NCM form view in a sheet, looks a bit more modern that way. [1] https://github.com/odoo/enterprise/pull/43797 task-4998498
The spreadsheet selection dialog has been redesigned to make labels, fields, and actions clearer for users. Button wording now better reflects the available choices, helping users insert or discard spreadsheet content with more confidence.
Original PR description
## Description
- Restyled the spreadsheet selector dialog for better visibility and clarity.
- Updated title, labels and input style for improved user experience.
Before this PR:
- Labels and fields styling made them less noticeable.
- Action buttons were generically labeled ("Confirm" / "Cancel").
After this PR:
- Labels and input fields are visually prominent and consistently styled.
- Button labels are now action-driven ("Insert" / "Discard").
Task: [4953592](https://www.odoo.com/odoo/project/2328/tasks/4953592)New salary contract offers are now consistently created with an associated employee or applicant. This helps HR teams keep offers properly connected to the right person, reducing confusion and improving record accuracy.
Breadcrumbs in the Cohort view now restore from the user's recent session state instead of relying only on the page URL. This helps users return to the same navigation path after refreshing the browser, avoiding confusing or extra breadcrumb steps.
Original PR description
Since [1] when reloading the browser the breadcrumb is restored based on the URL. This was implemented in a very naive way. For each action found in the URL, a multiview was added to the breadcrumb.…
Since [1] when reloading the browser the breadcrumb is restored based on the URL. This was implemented in a very naive way. For each action found in the URL, a multiview was added to the breadcrumb. Similarly, for each pain action/ID found in the URL, a form view was added to the breadcrumb. Note that the active_id (found before the action in the URL), is taken into account in the context of the action. For example, if the URL is : `/odoo/project/5/tasks`: - for the `project` action, the list of projects will be added to the breadcrumb; - for the `project/5` action/ID pair, the form view of the project 5 will be added; - for the `5/tasks` action (with active_id 5), the list of tasks for the project 5 will be added. However, this naive implementation does not consider that the user can navigate directly from the list of projects to the list of tasks for a project without passing through the project form view. This commit saves the current state in the session storage, to be used to restore the breadcrumb when the page is reloaded. Note that similar behaviour was implemented to improve action restoration [2]. [1] https://github.com/odoo/odoo/commit/c63d14a0485a553b74a8457aee158384e9ae6d3f [2] https://github.com/odoo/odoo/commit/e8afebdcbf5d725091983fbe3b425fec4aa3a071 task-id 5011505
Shop floor users can now adjust how many manufacturing orders appear at once, restore filtering to the current station, and load all available order cards when needed. This makes it easier for production teams to manage busy work centers with large order volumes.
Original PR description
Three small commits making the handling of large amounts of MOs easier in the shop floor: 1. Add a setting to customize the card limit (currently locked at 40) 2. Add back this station filter 3. Add button to load all cards task-4822881
The live chat information panel is easier for support teams to use, with clearer recent page views, better layout, and links opening in a new tab. It also improves readability in dark mode and accessibility for helpdesk tickets, helping agents work more efficiently and inclusively.
Original PR description
1. Add website name to recent page views. 2. Improve chatbot answers display in dark mode. 3. Update recent conversations button alignment. 4. Do not display recent conversations when the chat is closed. 5. Move notes section next to the status section. 6. Open links in the info panel in a new tab. 7. Helpdesk tickets accessibility improvements. https://github.com/odoo/odoo/pull/219053 task-4929870 Forward-Port-Of: odoo/enterprise#90350
Brazilian point-of-sale users can now download NFC-e XML files for multiple orders at once from the orders list. This saves time and reduces repetitive manual work when collecting electronic invoice files for reporting or administration.
Original PR description
- Before PR: No available action to download NFC-e XML files in batch. User has to download each xml file one by one. - After PR: An action to download multiple NFC-e XMLs for multiple orders is added in the action menu of POS orders list view. - Task Id: 4934938
Resolved issues and error corrections
Subscriptions that were paused and manually invoiced now resume with the correct next billing date. This prevents businesses from skipping billing periods or invoicing against dates that were already handled manually.
Original PR description
Version: - saas-18.4 Before: - If a subscription was paused and a manual invoice was created, resuming the subscription would set the next invoice date incorrectly. - It would often pick a date that…
Version: - saas-18.4 Before: - If a subscription was paused and a manual invoice was created, resuming the subscription would set the next invoice date incorrectly. - It would often pick a date that had already been invoiced manually, skipping over the pause period. - This happened because the user_pause_start is not reset after posting the manual invoice. After: - Now, when a manual invoice is posted during a pause, the pause state is cleared right away. - This makes sure the next_invoice_date is calculated properly when the subscription is resumed, without missing the pause period. Impact: - Fixes issues where subscriptions skipped billing periods after a manual invoice during a pause. - Keeps the billing period accurate when pausing and resuming subscriptions. Steps to reproduce: - Create and confirm a subscription. - Pause the subscription. - Post a manual invoice. - Resume the subscription. task-4946268 Forward-Port-Of: odoo/enterprise#90395
Rental orders now create and publish planning shifts more reliably, including creating one shift per unit when products are ordered by unit. The update also prevents staff from adding shifts to rental order lines that are already fully planned, helping avoid overbooking and planning errors.
Original PR description
## [FIX] sale_renting_planning: make sure shift generated by RO is published ## [FIX] sale_renting_planning: generate shifts when confirming rental order based on uom Before this commit, when the…
## [FIX] sale_renting_planning: make sure shift generated by RO is published ## [FIX] sale_renting_planning: generate shifts when confirming rental order based on uom Before this commit, when the user creates room product to generate shifts when a rental order is confirmed with that product, we expect to generate one shift per quantity ordered if the UoM is Unit instead of Hours/Days. This commit improves the shifts generation to take into account the UoM set on the SOL linked to rental order confirmed. That is, if the UoM set is Unit then one slot per unit ordered of the product will be generated. Otherwise, one shift will be generated for the SOL as it is currently the case. ## [FIX] sale_renting_planning: make sure to not overload the rental service Before this commit, when the user creates a new shift and clicks on `Add to Last Order` the shift will be added to the SOL contained one of products linked to the role set on the shift. The problem is we don't check if there is still something to plan for that SOL. This commit makes sure the SOL to set to the shift has something to plan to be sure it is not overloaded. task-4916537 Forward-Port-Of: odoo/enterprise#91327
This fix prevents the French FEC import from overwriting account names when multiple accounts share similar codes but have different labels. It helps preserve accounting data accuracy during imports and avoids manual corrections after importing files.
Original PR description
Steps to reproduce: - import a fec with different account 164*** with different names Issue: All the account's name will be overriden Cause: Before 18.0, apparently, code and name were joined and was not an issue solution: update the code to the new logic by filtering out the name from the override (`_apply_template`) opw-4690284 Forward-Port-Of: odoo/enterprise#92149 Forward-Port-Of: odoo/enterprise#86809
The POS Belgian blackbox module now keeps existing employee clock-ins when another employee clocks in from a different device. This prevents accidental clock-outs during device synchronisation, helping stores track staff attendance accurately.
Original PR description
- Fixes an issue where clocking in a second employee on a different device would automatically clock out the first one. This was due to `self` being unset during POS session leading to incorrect loading of `users_clocked_ids` and `employees_clocked_ids`. - The issue was appearing when `pos_session._post_read_pos_data` is triggered from `pos_config.notify_synchronisation`. task-id: 4902090 Forward-Port-Of: odoo/enterprise#89273
Batch transfer route planning now opens the intended map view, restoring the ability to rearrange pickings from that screen. This helps logistics teams organize deliveries correctly without being sent to a map view that does not support the needed ordering.
Original PR description
Commit ade5e5085df2 move the `default_order` value as it was defined in the wrong module. Consequence is the map view defined in `stock_enterprise` cannot be reordered anymore. This is an issue as the one in `stock_fleet_enterprise` is never used. The action window is patched to take a picking map view but without specifying witch one. This commit force the map view defined in `stock_fleet_enterprise` to be used in the action of `stock_fleet_enterprise`. Consequence is that the picking can be rearranged again in the map view coming from a batch transfer and not coming from the picking list. Forward-Port-Of: odoo/enterprise#91999
The portal now shows total hours based only on validated timesheets when that invoicing policy is selected. This prevents customers from seeing inflated hours that include unvalidated work, keeping task totals consistent with the timesheet lines displayed.
Original PR description
### Steps to reproduce: - Set timesheets inovicing policy to 'Validated Timesheets Only' - From the portal go to any task that has some validated timesheet and some other not - Notice that the lines…
### Steps to reproduce: - Set timesheets inovicing policy to 'Validated Timesheets Only' - From the portal go to any task that has some validated timesheet and some other not - Notice that the lines shown is the validated ones only but the Hours spent includes the non-validated ones too ### Current behavior before PR: The total hours spent for timesheets in portal view when setting the invoicing policy to 'Validate Timesheets Only' is calculated wrongly as it takes the non validated ones into account. This is happening as when passing the values to the view we pass 'task_sudo' variable which will have the SUPERUSER as the env.user https://github.com/odoo/odoo/blob/saas-17.2/addons/project/controllers/portal.py#L569 so it won't pass the condition if the user is portal or not https://github.com/odoo/enterprise/blob/saas-17.2/sale_timesheet_enterprise/models/project_task.py#L33:L35 and it will calculate all the timesheet without taking validation into condisderation. ### Desired behavior after PR is merged: As we are using those computed fields only in portal views so we don't have to check if the user is portal user as even if an internal user is showing the same view for testing he should be able to see the same data as the portal user. opw-4193842 Forward-Port-Of: odoo/enterprise#70557