Daily updates from Odoo
Thursday, July 31, 2025
15 changes · master
Enhancements to existing features
Users now see a clearer popup explaining why signed documents cannot be deleted. This replaces a technical or unclear error, making the signing workflow easier to understand and reducing confusion.
Original PR description
Before: - Deletion of signed documents(`state='signed'`) was blocked with a technical or unclear error message. After: - A more user-friendly popup message is shown when attempting to delete a signed document. Impact: - Improve user experience by clearly explaining why deletion is not allowed for signed documents task-4879592
Room booking and VoIP features were updated to work with a new browser tab coordination mechanism. This helps ensure these services behave reliably when users have Odoo open in multiple tabs.
Original PR description
https://github.com/odoo/odoo/pull/218332 introduced a new master tab election mechanism. Adapt enterprise code for it. community: https://github.com/odoo/odoo/pull/218332
IoT device records now show which Point of Sale they are configured with. This makes it easier for users to identify and manage devices used in PoS setups without searching through separate configuration screens.
Original PR description
In order to ease the configuration and use of IoT devices in PoS, we now display the PoS where devices are configured directly on device records. Task: 4901312 Forward-Port-Of: odoo/enterprise#88819
Resolved issues and error corrections
Users can now clear and reselect a start date in work order time tracking without triggering an error. This prevents interruptions when updating manufacturing work order time entries and keeps the workflow reliable.
Original PR description
When the user removes the value of the start date and selects the value again in the start date, a traceback will appear Steps to reproduce the error: - Create one mo > Work orders > Add a line >…
When the user removes the value of the start date and
selects the value again in the start date,
a traceback will appear
Steps to reproduce the error:
- Create one mo > Work orders > Add a line > Click on Open work order button
- In Time Tracking > Add a line > Remove the start date >
Select the start date again > Apply
Traceback:
```
TypeError: '<' not supported between instances of 'bool' and 'datetime.datetime'
File "odoo/http.py", line 2373, in __call__
response = request._serve_db()
File "odoo/http.py", line 1903, in _serve_db
return self._transactioning(
File "odoo/http.py", line 1966, in _transactioning
return service_model.retrying(func, env=self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1933, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2177, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 223, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 754, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 35, in call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 459, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "addons/web/models/models.py", line 1007, in onchange
record._apply_onchange_methods(field_name, result)
File "odoo/models.py", line 7028, in _apply_onchange_methods
res = method(self)
File "addons/mrp/models/mrp_workcenter.py", line 448, in _date_start_changed
self._loss_type_change()
File "addons/mrp/models/mrp_workcenter.py", line 473, in _loss_type_change
if self.workorder_id.duration > self.workorder_id.duration_expected:
File "odoo/fields.py", line 1208, in __get__
self.recompute(record)
File "odoo/fields.py", line 1423, in recompute
apply_except_missing(self.compute_value, recs)
File "odoo/fields.py", line 1396, in apply_except_missing
func(records)
File "odoo/fields.py", line 1445, in compute_value
records._compute_field_value(self)
File "odoo/models.py", line 5037, in _compute_field_value
fields.determine(field.compute, self)
File "odoo/fields.py", line 101, in determine
return needle(*args)
File "home/odoo/src/enterprise/saas-17.4/mrp_workorder_hr_account/models/mrp_workorder.py", line 62, in _compute_duration
super()._compute_duration()
File "home/odoo/src/enterprise/saas-17.4/mrp_workorder/models/mrp_workorder.py", line 762, in _compute_duration
wo.duration = wo.get_duration()
File "home/odoo/src/enterprise/saas-17.4/mrp_workorder/models/mrp_workorder.py", line 838, in get_duration
duration += self._intervals_duration([(t.date_start, t.date_end or now, t) for t in times])
File "home/odoo/src/enterprise/saas-17.4/mrp_workorder/models/mrp_workorder.py", line 826, in _intervals_duration
for date_start, date_stop, timer in Intervals(intervals):
File "addons/resource/models/utils.py", line 124, in __init__
for value, flag, recs in sorted(_boundaries(intervals, 'start', 'stop')):
File "addons/resource/models/utils.py", line 51, in _boundaries
if start < stop:
```
https://github.com/odoo/enterprise/blob/1f626176d28762683dc32ddbb351d994be894a71/mrp_workorder/models/mrp_workorder.py#L787 Here when "date_start" is empty,
It leads to the above traceback.
sentry-5679416830
Forward-Port-Of: odoo/enterprise#91259
Forward-Port-Of: odoo/enterprise#68014Users can now open signature requests even if the employee or user who created them has since been deleted. This prevents an error from blocking access to existing signing documents and keeps signature workflows available.
Original PR description
## Issue: ## Before this commit, opening a sign request created by a deleted user would raise an Owl Error ## Cause: ## The `action.params` are used as a fallback in the signRequest setup But sometimes sometimes the `action.params`are undefined, causing access to `action.params.create_uid` to fail ## Fix: ## The document can be open with `create_uid` set to False So we just added a check for `action.params` to be set before accessing his properties If the create_uid isn't in the context or in the params, it will be set to False ## Steps to reproduce: - Create a user (to be deleted later) - Create a sign request with this user - Delete the user - Try to open the sign request - The error should be displayed opw-4786368 Forward-Port-Of: odoo/enterprise#91271 Forward-Port-Of: odoo/enterprise#88758
Website generation now handles HTML replacements more efficiently by reusing a prepared replacement pattern instead of rebuilding larger ones repeatedly. This reduces unnecessary processing and helps generated website content load or update faster, especially when many replacements are involved.
Original PR description
Fixed issue where regex where larger than required due to growing dictionnary of replacements. Improved global replacements by creating the patern early and sharing it accross all replacement. Forward-Port-Of: odoo/enterprise#91218
The referral rewards configuration now opens in the correct full form view instead of the mobile-specific layout. This makes it easier for HR teams to manage reward settings reliably from the standard configuration screen.
Original PR description
since https://github.com/odoo/enterprise/commit/6a9f8a8d69fecde388f0030a10944a6fa9da9e58, the main reward form view has been replaced by the mobile alternate view. This commit ensure that the main form view is used when accessing the reward configuration form view. Task-4953625
This fix ensures tax prediction in Accounting uses the right document context when suggesting taxes. It prevents failed or missing tax predictions, helping users get more reliable accounting automation.
Original PR description
Previously, when _predicted_field was invoked from _predict_specific_taxes, self did not have an associated move_id. As a result, _build_predictive_query was unable to construct the correct query, causing the prediction logic to fail and return False. With this fix, a new argument has been added to _predicted_field to pass the move. This ensures that the prediction logic uses the correct move_id and behaves as expected. **task**-4943015 Community PR - https://github.com/odoo/odoo/pull/219911 Forward-Port-Of: odoo/enterprise#91224
The app creator dialog now displays its selection buttons with the correct spacing again. This fixes a visual issue introduced during a recent component update, helping keep the app creation experience clear and polished.
Original PR description
This commit brings back the 'p-0' class to the SelectMenu's being used in the app creator. They were removed during the refactor of the component, but were still required to display properly those buttons in the app creator dialog.
Users can now edit bank-related fields in Odoo Studio without encountering an error. This prevents a crash when configuring certain contact and accounting screens, making customization smoother and more reliable.
Original PR description
Example of steps: - Install contacts, web_studio and accounting - Go to contacts, accounting tabs - Open web_studio and click on Banks field - Traceback The error stems from the fact that we are using a widget in an o2m field that uses a placeholder that is not defined for o2m. One solution is to add the placeholder attribute for o2m in addition to m2m and m2o. opw-4937447 Forward-Port-Of: odoo/enterprise#91346
The Belgian point of sale module now checks that a value is present before using it during processing. This prevents an avoidable error and helps keep POS operations running smoothly.
Original PR description
We increased the code robustness by ensuring the variable isn't undefined before using `.startsWith` Forward-Port-Of: odoo/enterprise#91357
The payslip PDF now respects the salary structure option to hide the basic wage. This prevents basic wage details from appearing when payroll administrators have chosen to keep them off printed payslips.
Original PR description
After this commit: odoo/enterprise@9dceed0896ce5089bccbc9cc2ce1e8c4b13f0048…
After this commit: odoo/enterprise@9dceed0896ce5089bccbc9cc2ce1e8c4b13f0048 [diff](https://github.com/odoo/enterprise/commit/9dceed0896ce5089bccbc9cc2ce1e8c4b13f0048#diff-de4a628e7837c273b67d71f93efab85b6a9ee957ea702f502066ebcc632a76cbL64) The condition that handles hiding the basic wage on the payslip was not added —possibly it was missed. That’s why the "Hide basic on PDF" feature doesn’t work, regardless of whether it’s enabled, as the necessary condition is missing in the template. Steps to reproduce (on runbot): - In a v18 runbot, open any payslip and go to the salary structure. Enable the "Hide basic on PDF" option. - Return to the payslip and print it. - You’ll see that the basic wage is still printed on the payslip. **Before Fix:** <img width="669" height="238" alt="payslipbefore" src="https://github.com/user-attachments/assets/2fce67a2-19d8-45d8-88fa-4fc6a1767e68" /> **After Fix:** <img width="683" height="289" alt="payslipafter" src="https://github.com/user-attachments/assets/adcb0104-9c4e-4a35-ba78-b3f278f6bfda" /> opw-4953831 Forward-Port-Of: odoo/enterprise#91389 Forward-Port-Of: odoo/enterprise#90798
Code cleanup and technical improvements
This update standardizes how internal messaging-related data is prepared across several Enterprise apps. It helps keep the codebase consistent and easier to maintain, with no expected change to day-to-day user workflows.
Original PR description
Enterprise counter-part. https://github.com/odoo/odoo/pull/221252
The accounting reconciliation interface was adjusted so it no longer relies on an older website editing component. This is an internal modernization step that helps reduce legacy dependencies without changing day-to-day accounting workflows.
Original PR description
This commit is part of an effort to remove the legacy web_editor module. task-4920120 https://github.com/odoo/odoo/pull/219315
Product attribute sample data has been moved into the core product area so it can be reused consistently across related apps. This keeps demo setups for manufacturing, rentals, and website rentals cleaner and easier to maintain without changing day-to-day user workflows.
Original PR description
Move product attribute data to product module for reusability Forward-Port-Of: odoo/enterprise#87938