Daily updates from Odoo
Friday, November 21, 2025
15 changes · 17.0
Resolved issues and error corrections
This update prevents an error when a badge is scanned for an attendee who is not linked to any sale order. It ensures the system treats these registrations as free by default, so event staff can scan badges without interruption.
Original PR description
Currently an error occurs when the user is scanning a badge that is not linked to a sale order. Steps to Reproduce: - Install 'event_sale' module. - Go to Events > Registration Desk ; click on Select…
Currently an error occurs when the user is scanning a badge that is not linked
to a sale order.
Steps to Reproduce:
- Install 'event_sale' module.
- Go to Events > Registration Desk ; click on Select Attendee >> New.
- Select any Event and then save it, A pdf having QR code would be generated.
- Now download that pdf.
- Go back to Events > Registration Desk ; click on Scan a Badge(Tap to scan) and
scan your QR Code.
- The error would be generated.
Traceback on sentry:
```
KeyError: False
File "odoo/http.py", line 2150, in __call__
response = request._serve_db()
File "odoo/http.py", line 1722, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "odoo/service/model.py", line 133, in retrying
result = func()
File "odoo/http.py", line 1749, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 1953, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "addons/website/models/ir_http.py", line 235, in _dispatch
response = super()._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 222, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 722, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 24, in call_kw
return self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 20, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 464, in call_kw
result = _call_kw_model(method, model, args, kwargs)
File "odoo/api.py", line 435, in _call_kw_model
result = method(recs, *args, **kwargs)
File "addons/event/models/event_registration.py", line 161, in register_attendee
res = attendee._get_registration_summary()
File "addons/event_sale/models/event_registration.py", line 136, in _get_registration_summary
'sale_status_value': dict(self._fields['sale_status']._description_selection(self.env))[self.sale_status],
```
This error arises at [1] when it attempts to access the dictionary with the key
'self.sale_status', but when 'self.sale_status' was False or not set, it
resulted in a KeyError.
This commit fixes the above issue by giving 'free' as the default value of sale
status as there is no sale order available.
Link: [1]-https://github.com/odoo/odoo/blob/c1d250fcbc178eaee1694197b759d3717e3b50e6/addons/event_sale/models/event_registration.py#L136
sentry-4620674401
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update prevents a crash when someone enters an invalid Sendcloud tracking reference. Instead of an unexpected error, users now see a clear message explaining that the tracking code is not valid, which makes the issue easier to understand and resolve.
Original PR description
This traceback arises when the user gives an invalid tracking reference. <h4>To reproduce this issue:-</h4> 1) Install `delivery_sendcloud` 2) Create a new shipping method in `inventroy/configiration` 3) Make the provider `sendcloud` and give any key and secret 4) Now create a `delivery picking` from `Inventory/Operation/Delivery` 5) In `additional Info` select the carries as above created `shipping method` 5) Give any `tracking reference` 6) Click on `tracking` stat button Error:- ``` TypeError: 'bool' object is not subscriptable ``` When the user gives an invalid tracking reference it leads to the above traceback as there will be no `picking.sendcloud_parcel_ref` https://github.com/odoo/enterprise/blob/d91b91626fb488a98d10757142ad14cc9ff7d503/delivery_sendcloud/models/delivery_carrier.py#L188 After applying this commit will resolve this issue by raising a user exception. sentry-5096109840
This update prevents a crash that could happen when a user changes the expression label in the Generic Tax report. It ensures the Tax Report still opens normally even if that label has been renamed, improving reliability for accounting users.
Original PR description
This traceback occurs when the user changes 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` of tax and save the record 4) Open the `Tax Report` from `Reporting` 5) A traceback occurs Error:- ``` UnboundLocalError: local variable 'col_value' referenced before assignment ``` Because `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#L920-L932 After applying this commit will resolve this issue by assigning a fallback value of an empty string to col_value. sentry-5307746934
This update prevents an error when opening the restaurant mobile menu if the company has no country set. It helps keep the POS self-order flow working even when that company setting is left blank.
Original PR description
This issue arises when a user removes the `country` from their company and then attempts to open the `mobile menu` for the restaurant using the POS module. Steps to produce : - Install…
This issue arises when a user removes the `country` from their company and then attempts to open the `mobile menu` for the restaurant using the POS module.
Steps to produce :
- Install `pos_self_order` module.
- Navigate to Settings > User & Companies > Companies
- Open your company > Remove the country of your company.
- Now go to POS module open the `mobile menu` for the restaurant.
- Error will be generated.
See traceback :
```
IndexError: list index out of range
File "odoo/http.py", line 2157, in __call__
response = request._serve_db()
File "odoo/http.py", line 1732, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "odoo/service/model.py", line 133, in retrying
result = func()
File "odoo/http.py", line 1759, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 1873, in dispatch
return self.request.registry['ir.http']._dispatch(endpoint)
File "addons/website/models/ir_http.py", line 235, in _dispatch
response = super()._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 207, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 722, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/pos_self_order/controllers/self_entry.py", line 58, in start_self_ordering
**pos_config._get_self_ordering_data(),
File "addons/pos_self_order_epson_printer/models/pos_config.py", line 11, in _get_self_ordering_data
data = super()._get_self_ordering_data()
File "addons/pos_online_payment_self_order/models/pos_config.py", line 20, in _get_self_ordering_data
res = super()._get_self_ordering_data()
File "addons/pos_self_order/models/pos_config.py", line 335, in _get_self_ordering_data
"country": self.company_id.country_id.read(["vat_label"])[0],
```
This issue occurs because here
https://github.com/odoo/odoo/blob/78cbdc604ec6ef48ef291d354126d7b171eaec64/addons/pos_self_order/models/pos_config.py#L335 when try to access the `country_id` it will not get that because country was not selected in the company and also the country was not a required field.
sentry-4769344261
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update prevents backend crashes when a user enters invalid content while editing a report in Studio. Instead of failing silently or generating a server-side error, the editor now shows a user-friendly message so the issue can be corrected more easily.
Original PR description
Currently, an error is generated in backend when editing any reports in studio mode with an incorrect value or syntax. Steps to reproduce(edit a report of 'account' module to generate an error as an example): - Install an 'account' and 'web_studio' module. - Navigate to invoicing / Customers / Invoices and open a web studio mode. - Open reports and click any reports. - Click on 'EDIT SOURCES' to modify the report with incorrect values or syntax and an error will generated in the backend. To resolve the issue, we will add a try-except block at [1] to handle errors. This will ensure that if an error occurs during editing, it will raise a user error message and this error message will be seen in the report editor. link [1]: https://github.com/odoo/enterprise/blob/f94ca3f5ac02e932bb986c4f151733927acdd98c/web_studio/controllers/report.py#L666 sentry-5128667236
This update corrects an issue where the French Balance Sheet could become out of balance for companies using the 2024 chart of accounts. It ensures missing income and expense balances are still included when calculating retained earnings, so financial reports remain accurate and compliant.
Original PR description
[FIX] l10n_fr_reports: unbalanced Balance Sheet when coming from the 2024 CoA https://github.com/odoo/odoo/commit/8f3a86925e0301c15ca93b64d6237b69a534d71a introduced a new version of the French CoA,…
[FIX] l10n_fr_reports: unbalanced Balance Sheet when coming from the 2024 CoA https://github.com/odoo/odoo/commit/8f3a86925e0301c15ca93b64d6237b69a534d71a introduced a new version of the French CoA, legally mandatory starting in 2025. Doing so, it also adapted the P&L and BS reports accordingly. However, it did not take into account the fact that some deprecated account codes would disappear from the P&L, causing the BS to be unbalanced when computing the retained earnings (by calling the P&L with a forced date_scope to run it on the full history). We fix that by reinjecting the balance of the missing Income and Expense accounts in the computation of the BS's Retained Earnings line. opw-5212801 =============================================================== [FIX] l10n_fr_reports : add new accounts in P&L Backport from https://github.com/odoo/enterprise/commit/eb35916f4f5a45e0c11919e0ee1a16e0caee010f , which was done in master for 18.2, but should have targetted older versions as well.
This update fixes an issue where clicking the Pack button in the purchase catalog could sometimes stop increasing the quantity, especially for products with decimal packaging sizes. It ensures the quantity is calculated more reliably so users get the expected number of packs every time.
Original PR description
Issue ----- Clicking the "pack" button in the catalog sometimes seems not to work and the product quantity remains unchanged. Steps to reproduce ----- - Enable packagings in settings - Create a…
Issue ----- Clicking the "pack" button in the catalog sometimes seems not to work and the product quantity remains unchanged. Steps to reproduce ----- - Enable packagings in settings - Create a product - Set a vendor "Mom" - Add a packaging of some decimal number, eg 22.68 - Create a new purchase from "Mom" - Open the catalog - Click the product once - Click the "pack" button 4 times (# of clicks required depends on the pack amount) > The last click did not increase the product quantity Cause ----- Javascript floats are sometimes an approximation of the value rather than the value itself. This means that when we do https://github.com/odoo/odoo/blob/0611a74cb52ca639b683ef158f8b4f2f347d08ad/addons/purchase/static/src/product_catalog/kanban_record.js#L33-L34 the flooring might sometimes get a close approximation and end up flooring down the packaging quantity. In our example, `this.productCatalogData.quantity` should be `68.04` but is actually `68.03999999999999`. This leads to `this.productCatalogData.quantity / packaging.qty` == `2.9999999999999996` `Math.floor` then rounds it down to 2 so we end up with 2 + 1 = 3, which is the current packaging quantity so nothing changes. ----- Ticket: opw-5130865
This fix ensures that a call is removed from the VOIP softphone as soon as it is unlinked. It prevents users from seeing outdated calls that have already been deleted, keeping the interface accurate and less confusing.
Original PR description
A call that was unlinked previously remained visible in the VOIP softphone. This fix ensures that the call is correctly removed from the softphone view as soon as it is unlinked. Task-5262162
This change fixes an incorrect Dutch translation for the 9% sales tax description. It helps ensure tax labels are shown clearly and accurately to users in the Dutch localization.
Original PR description
The traduction of te description of the 9% ST tax was wrong and was TVA to get back on a sale tax task-5217323
This update fixes an issue where sending an email from the Contacts list could fail when a message template was used. Emails now correctly find their recipients in this flow, so they are sent successfully instead of being cancelled.
Original PR description
Steps to reproduce: ------------------------- 1. Install the `Contacts` module and configure an outgoing mail server 2. Create a mail template with Auto Delete False and Applies to Contacts 3. Create…
Steps to reproduce: ------------------------- 1. Install the `Contacts` module and configure an outgoing mail server 2. Create a mail template with Auto Delete False and Applies to Contacts 3. Create a new contact with an email address 4. From the chatter, click Send Message, select the created mail template, and send it. 5. Go back to the Contacts list view and search for the newly created contact 6. Select the contact and from the Action menu, click Send Email 7. Again, select the same mail template and add a test email in the Reply-To Address field from the Settings page 8. Click Send Observation: ------------------------- 1. The email sent from the chatter appears in Sent state. 2. The email sent from the wizard appears in Cancelled state. Issue: ------------------------- In the following code https://github.com/odoo/odoo/blob/a85f268eab4647261b18b1106223c8e18dded085/addons/mail/wizard/mail_compose_message.py#L1037-L1044 there is no fallback for recipients when both `template_id` and `email_mode` are set. As a result, when `partner_ids` are missing in `mail_values_all`, the email fails to send. Solution: ------------------------- Added a condition to handle the case where both `template_id` and `email_mode` are present. If `partner_ids` are not defined in `mail_values_all`, the system now fetches `default_recipients` and adds them to `mail_values_all`. opw-5143950
This fix ensures that when a report filter is enabled on a combined report, it is also enabled on the report’s sections when needed. As a result, the filter will correctly appear in the user interface instead of being missing in some report views.
Original PR description
When using a composite report whose sections aren't used independently, enabling that filter on the composite report needs to enable it on their sections as well, else it won't show in the UI. This is the standard behavior for all report filters.
This change prevents the system from trying to load a non-existent file when stopping a ringtone. It improves reliability by clearing the audio source in a way browsers handle correctly, avoiding unnecessary background requests.
Original PR description
Setting the src of an element to null triggers a GET HTTP request to /null. This is not the intended behavior; we want to reset the source so that it is not linked to any file, but the browser interprets it as an attempt to load a file called "null". This commit fixes the problem by resetting the source using removeAttribute instead. [Task-5349985](https://www.odoo.com/odoo/project/5778/tasks/5349985)
When an invoice is duplicated, it will no longer carry over the original source document from the previous invoice. This avoids misleading information on copied invoices and prevents errors in external invoice exports that rely on that field.
Original PR description
Currently we copy the `invoice_origin` field on moves (when copying / duplicating moves). I.e. when copying a move that was created from a SO we end up with the `invoice_origin` filled on the copied move (but the SO is not linked and does not really have anything to do with the move anymore) This can i.e. lead to issues in EDIs (`l10n_es_edi_verifactu` like in the ticket) that send the `invoice_origin` as part of the data about the move. Reproduce 1. Create a sales order (SO). 2. Create an invoice from the SO (and confirm). You can see that the SO is linked at the top (smart button). 3. Copy the invoice (and confirm). You can see that the SO is not linked. 4. Go to the invoices list view and make the "Source Document" visible. 5. Both the invoices have the same SO as their "Source Document". opw-5115495
This change fixes an issue where a filter enabled on a combined financial report could fail to appear in the user interface. It ensures the same filter is also enabled on the report sections underneath, so report options behave consistently and users can actually see and use them.
Original PR description
When using a composite report whose sections aren't used independently, enabling that filter on the composite report needs to enable it on their sections as well, else it won't show in the UI. This is the standard behavior for all report filters.
This change ensures that when a filter is enabled on a composite financial report, the same filter is also applied to its sections. As a result, the filter now appears correctly in the user interface and behaves consistently with other report filters.
Original PR description
When using a composite report whose sections aren't used independently, enabling that filter on the composite report needs to enable it on their sections as well, else it won't show in the UI. This is the standard behavior for all report filters. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr