Wednesday, September 4, 2024
13 changes · 17.0
Resolved issues and error corrections
French invoice PDFs now keep the information table properly formatted when a separate customer address column is shown. This prevents broken-looking invoices when billing a child contact with a different address from the main company.
Original PR description
Version: 17.0+ Issue: When the Customer Address column is included in the report pdf, the table format breaks. This column is added when the `partner_id.commercial_partner_id` is different than the `partner_id` of the invoice or invoice refund. Purpose of this PR: To restore the format of the information table when the Customer Address column is included. Similar to #176209 Steps to Reproduce on Runbot: 1) Install l10n_fr and switch to FR Company 2) Configure contacts a French company to have a child contact with a different address. 3) Create invoice with the child contact as the customer. 4) Print invoice and the informations table will be formatted incorrectly. opw-4122930 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Invoicing managers can now create a bank account from Settings without needing broader Administration/Settings permissions. This prevents an access error during onboarding and lets authorized finance users complete the setup smoothly.
Original PR description
Steps to reproduce: 1. Login with a user with invoicing manager permission, but not settings one. 2. Go to Settings > Add a Bank account. 3. Fill the data, and click on "Create". Current behavior: Access Error, due to the lack of the Administration/Settings permission Expected behavior: No error The solution is to put sudo on the operation. @Tecnativa TT50693
Importing a custom module with an incompatible version will still show users the appropriate error message, but it will no longer create an unnecessary system error log. This reduces noise for support and monitoring teams without changing the user-facing validation.
Original PR description
Currently, a log error is generated when the user tries to import a module that is not the same as the current Odoo version. Stack Trace: ``` ValueError: Invalid version '17.0.1.0.0'. Modules should…
Currently, a log error is generated when the user tries to import a module that is not the same as the current Odoo version.
Stack Trace:
```
ValueError: Invalid version '17.0.1.0.0'. Modules should have a version in format `x.y`, `x.y.z`, `saas~17.2.x.y` or `saas~17.2.x.y.z`.
File "addons/base_import_module/models/ir_module.py", line 253, in _import_zipfile
self.sudo()._import_module(mod_name, path, force=force, with_demo=with_demo)
File "addons/base_import_module/models/ir_module.py", line 81, in _import_module
values['latest_version'] = adapt_version(terp['version'])
File "odoo/modules/module.py", line 423, in adapt_version
raise ValueError(f"Invalid version {base_version!r}. Modules should have a version in format `x.y`, `x.y.z`,"
```
The error was caught on log because at [1] `_logger.exception()` was used, and this log error was not
useful because after the printing, the log `UserError` was raised, which shows the user what's wrong with its custom module.
This commit removes the logger exception because the `UserError` shows
what is wrong with the custom modules.
[1]-https://github.com/odoo/odoo/blob/b95edd874ce904ef231c295790a003992db002e3/addons/base_import_module/models/ir_module.py#L255-L258
sentry-4931285432Fixes an error that could interrupt administrators when restoring several archived views at once. This makes view management more reliable and prevents a technical traceback from appearing during normal maintenance tasks.
Original PR description
When the user tries to unarchive the multiple views, a traceback will appear. Steps to reproduce the error: - Install 'website' - Go to Settings > Technical > Views - Open archived views > unarchive…
When the user tries to unarchive the multiple views,
a traceback will appear.
Steps to reproduce the error:
- Install 'website'
- Go to Settings > Technical > Views
- Open archived views > unarchive multiple views
Traceback:
```
ValueError: Expected singleton: ir.ui.view(534, 535, 537)
File "odoo/http.py", line 2248, in __call__
response = request._serve_db()
File "odoo/http.py", line 1823, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1843, 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 1821, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1828, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2053, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 220, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 756, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 38, in call_kw
return self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 34, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 458, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "odoo/models.py", line 5771, in action_unarchive
return self.filtered(lambda record: not record[self._active_name]).toggle_active()
File "odoo/models.py", line 5759, in toggle_active
(self - active_recs)[self._active_name] = True
File "odoo/models.py", line 6619, in __setitem__
return self._fields[key].__set__(self, value)
File "odoo/fields.py", line 1376, in __set__
records.write({self.name: write_value})
File "addons/website/models/theme_models.py", line 366, in write
return super().write(vals)
File "addons/website/models/ir_ui_view.py", line 95, in write
return super(View, self).write(vals)
File "odoo/addons/base/models/ir_ui_view.py", line 529, in write
self._validate_fields(['arch_db'])
File "odoo/models.py", line 1484, in _validate_fields
check(self)
File "odoo/addons/base/models/ir_ui_view.py", line 371, in _check_xml
view=self.key or self.id,
File "odoo/fields.py", line 1202, in __get__
record.ensure_one()
File "odoo/models.py", line 5856, in ensure_one
raise ValueError("Expected singleton: %s" % self)
```
https://github.com/odoo/odoo/blob/9be0c5348bfeb338bcba95b2a9c01e0d7dd14306/odoo/addons/base/models/ir_ui_view.py#L379 Here, self is used in place of view.
So it will lead to the above traceback.
sentry-5604174783
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fix prevents decorative text highlights from being incorrectly saved into website pages after delayed editor updates. Users can now switch between mobile and desktop views without highlights becoming misplaced or outdated, improving page editing reliability.
Original PR description
Steps to reproduce the bug: - Turn on the Cookies from setting for the website. - Go to front end, click on editor, go to theme tab. - Click on any Font Family, and select add a google font. - After adding, save. - Add a "Title" block, go to "mobile view", and add a text highlight. - Save the page. - Bug: If you switch between mobile and desktop views, the highlights are not updated (because the SVGs are fixed and get added to the view of the page). The bug occurred because some options, like the popup, trigger a resize after a delay before the page is saved. This causes the highlights to be added back to the DOM after the "TextHighlight" widget has been destroyed. To fix this, we prevent adding highlights if the "TextHighlight" widget has been destroyed. opw-4081390
This fix updates the SMS mailing report list view so hidden columns are handled in the correct way. It helps prevent display issues in the reporting interface and keeps the screen behavior consistent for users.
Original PR description
-Probably miss by script since https://github.com/odoo/odoo/commit/332c117f60a36f723c450f61ce2e0e7181d66c21 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
Percent pie widgets created in Studio no longer show a duplicate field name in list views. This makes list screens cleaner and easier for users to read without changing the underlying data.
Original PR description
Specification: When creating a percent pie widget in the list view using Studio, the field's name has been added after percent pie, which is not user-friendly. Expected behavior: The duplicate label should not be visible in the list view. Task-3942207
The mail activity menu now restores visual highlighting on activity text in the top bar. This helps users recognize they can click the text to filter activities by time period, improving navigation and reducing confusion.
Original PR description
Adding back the activity text highlight in the systray to make sure users understand the text is actually clickable and they can filter their activities on a specific time frame. Related commit: odoo/odoo@6b72bde3a7d3d3d9a12490431b5192ddb5230d9c Task-4141680 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an error that occurred when users tried to edit invoice report templates in Studio on databases with no invoice records. The reports now handle missing tax totals safely, allowing Studio editing to continue instead of showing a crash.
Original PR description
Currently error is generated when try to edit 'Invoices' or 'Invoices without Payment' reports in studio mode when there is no record. Steps to reproduce: - Install an 'account' and 'web_studio'…
Currently error is generated when try to edit 'Invoices' or 'Invoices without Payment' reports in studio mode when there is no record.
Steps to reproduce:
- Install an 'account' and 'web_studio' module (Without demo data).
- Navigate to invoicing / Customers / Invoices and open a web studio mode.
- Open reports and click on the 'Invoice' or 'Invoices without Payment' reports.
- Click on 'EDIT SOURCES'.
See Traceback:-
```
TypeError: 'bool' object is not subscriptable
File "<744>", line 200, in template_744
File "<744>", line 13, in template_744_content
QWebException: Error while render the template
TypeError: 'bool' object is not subscriptable
Template: ir.ui.view(744,)
Path: /t/t
Node: <t t-foreach="tax_totals[\'subtotals\']" t-as="subtotal"/>
File "odoo/http.py", line 2251, in __call__
response = request._serve_db()
File "odoo/http.py", line 1827, in _serve_db
return self._transactioning(_serve_ir_http, readonly=ro)
File "odoo/http.py", line 1847, 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 1825, in _serve_ir_http
return self._serve_ir_http(rule, args)
File "odoo/http.py", line 1832, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 2057, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 220, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 739, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "home/odoo/src/enterprise/saas-17.2/web_studio/controllers/report.py", line 652, in save_report
report_html = self._render_report(report, record_id)
File "home/odoo/src/enterprise/saas-17.2/web_studio/controllers/report.py", line 597, in _render_report
return request.env['ir.actions.report'].with_context(studio=True)._render_qweb_html(report, [record_id] if record_id else [], {"studio": True})
File "home/odoo/src/enterprise/saas-17.2/web_studio/models/ir_actions_report.py", line 24, in _render_qweb_html
return super(IrActionsReport, self)._render_qweb_html(report_ref, docids, data)
File "odoo/addons/base/models/ir_actions_report.py", line 927, in _render_qweb_html
return self._render_template(report.report_name, data), 'html'
File "odoo/addons/base/models/ir_actions_report.py", line 654, in _render_template
return view_obj._render_template(template, values).encode()
File "home/odoo/src/enterprise/saas-17.2/web_studio/models/ir_ui_view.py", line 1302, in _render_template
return super(View, self)._render_template(template, values)
File "odoo/addons/base/models/ir_ui_view.py", line 2024, in _render_template
return self.env['ir.qweb']._render(template, values)
File "odoo/tools/profiler.py", line 302, in _tracked_method_render
return method_render(self, template, values, **options)
File "odoo/addons/base/models/ir_qweb.py", line 594, in _render
result = ''.join(rendering)
File "<748>", line 42, in template_748
File "<748>", line 31, in template_748_content
File "<747>", line 90, in template_747
File "<747>", line 72, in template_747_content
File "<747>", line 60, in template_747_t_call_0
File "<742>", line 2412, in template_742
File "<742>", line 2394, in template_742_content
File "<742>", line 1650, in template_742_t_call_0
File "<744>", line 208, in template_744
```
The issue occurs when the system tries to access a boolean value which is stored in 'Tax_totals' in the 'document_tax_totals' template [1] and this a boolean value is passed into 'tax_totals' from this line [2] because record is not available.
link [1]: https://github.com/odoo/odoo/blob/a8daed02c58ab69cdea57a8f97065e229b07f0ab/addons/account/views/report_invoice.xml#L200-L201
link [2]: https://github.com/odoo/odoo/blob/a8daed02c58ab69cdea57a8f97065e229b07f0ab/addons/account/models/account_move.py#L1348
To resolve the issue, Add a condition that checks whether the 'Tax_totals' is available before call the 'document_tax_totals' template.
sentry-4499699758
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fixes Chilean invoice reports so discount amounts and discount percentages appear under the correct column headings. It prevents confusion when customers or staff review invoice discounts, improving document accuracy.
Original PR description
The discount percentage and discount amount values were not in the correct positions. To fix this, I placed the Discount Amount after the Discount Percentage ("td_discount") to make the table header…
The discount percentage and discount amount values were not in the correct positions.
To fix this, I placed the Discount Amount after the Discount Percentage ("td_discount") to make the table header and table data consistent. OWP-4112378
-->
Description of the issue/feature this PR addresses:
The Discount Percentage value and the Discount Amount value are not in the correct positions. The Discount Amount was placed after the unit price ("td_priceunit"), and its value was displayed after the Discount Percentage ("td_discount"). As a result, the values were swapped.
Current behavior before PR:
The Discount Amount and Percentage are mixed up.

Desired behavior after PR is merged:
The Discount Amount data should appear under the "Discount Amount" table header, and the Discount Percentage data should appear under the "Discount Percentage" header.

---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis fixes Chilean invoice reports so discount percentages and discount amounts appear under the correct column headings. It prevents customer-facing invoice confusion by ensuring discount information is clearly and accurately displayed.
Original PR description
The discount percentage and discount amount values were not in the correct positions. To fix this, I placed the Discount Amount after the Discount Percentage ("td_discount") to make the table header…
The discount percentage and discount amount values were not in the correct positions.
To fix this, I placed the Discount Amount after the Discount Percentage ("td_discount") to make the table header and table data consistent. OWP-4112378
-->
Description of the issue/feature this PR addresses:
The Discount Percentage value and the Discount Amount value are not in the correct positions. The Discount Amount was placed after the unit price ("td_priceunit"), and its value was displayed after the Discount Percentage ("td_discount"). As a result, the values were swapped.
Current behavior before PR:
The Discount Amount and Percentage are mixed up.

Desired behavior after PR is merged:
The Discount Amount data should appear under the "Discount Amount" table header, and the Discount Percentage data should appear under the "Discount Percentage" header.

---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prEmployee names that are too long were being cut off in the appraisal form view. This fix extends the employee name field to use the full available width, ensuring all employee names display completely regardless of length.
Original PR description
The employee name is cropped if too long on the appraisal form view. The field can be extended to full width to handle any name. Task: 4163637
Employee names that are too long were being cut off in the appraisal form view. This fix extends the employee name field to use the full available width, ensuring that all employee names display completely without being cropped.
Original PR description
The employee name is cropped if too long on the appraisal form view. The field can be extended to full width to handle any name. Task: 4163637