Friday, April 24, 2026
20 changes · 18.0
Resolved issues and error corrections
This update fixes a translation issue within the AI Copywriter dialog. Previously, alternative modes were not displayed in the correct language for international users. This change ensures all options within the dialog are translated, improving the user experience for all customers regardless of their language setting.
Original PR description
Description of the issue/feature this PR addresses: The alternativemodes on the AI Copywriter dialog are not translated
This update strengthens the security of Odoo's IoT websocket connections on Windows by using a trusted Certificate Authority bundle. This ensures reliable TLS verification and prevents potential issues with outdated system certificates, enhancing overall stability. Additionally, the update incorporates legal agreements for Corvanis and vvro.
Original PR description
The websocket-client library defaults to the system's SSL context, which can be broken or outdated on Windows. This aligns websocket TLS verification with the `requests` library by forcing a certifi-backed CA bundle. This improves reliability on Windows IoT environments without changing reconnect logic. This also adds the Odoo individual CLA for vvro and the corporate CLA for Corvanis. Forward-Port-Of: odoo/odoo#260942
This update resolves an error that occurred when importing CODA files from Belgian banks, specifically when the bank's detail sequence (3.2) was incremented. The fix adjusts the import parser to correctly handle these updated sequences, ensuring seamless bank statement imports. This prevents import failures and maintains accurate financial data.
Original PR description
### Issue: Some banks provide CODA files that do not strictly follow the specification, and increment the detail sequence on 3.2…
### Issue: Some banks provide CODA files that do not strictly follow the specification, and increment the detail sequence on 3.2 https://febelfin.be/media/pages/publicaties/2023/febelfin-standaarden-voor-online-bankieren/5607daeda5-1754302976/standard-coda-2.7-en.pdf Importing such files raises an error: `Error R3004: CODA parsing error on information data record 3.2, seq 00020002! Please report this issue via your Odoo support channel.` ### Cause: The parser compared the full `infoLine['ref']`, while only `infoLine['ref_move']` needs to remain consistent https://github.com/odoo/enterprise/blob/a6efef92b86d95e05245c4ccf26324d37cc153e6/l10n_be_coda/models/account_journal.py#L683-L698 The `infoLine['ref_move_detail']` (3.2 sequence) change should not block import when incremented and should not trigger an error ### Steps to reproduce: - Install `l10n_be_coda` and switch to the `BE company` - Import a CODA file with incremented 3.2 detail sequence (e.g., files available in related tickets or test data) Before the fix, the error is trigger opw-6071761
This update resolves a bug that prevented users from saving reports after removing elements from the report view. The fix ensures the system doesn't attempt to access non-existent elements, preventing an 'IndexError' and ensuring report saving functionality remains stable. This improves the user experience and prevents data loss.
Original PR description
Currently an error occurs we try to save a report after deleting an element from the view. Steps to reproduce: - Install `sale_management` and `web_studio`. - Turn on studio mode and go to `Sales > reports`. - Now open any of the report. - Delete the subtotal block from the report view and save. (Please refer to [this](https://drive.google.com/file/d/12SbqHooLBFlbpBgdeCCzkkU8yKw93LAF/view?usp=sharing) video.) Error: `IndexError: list index out of range` The error occurs as the element with the xpath [1] no longer exists and thus returns an empty list and when we try to access the element at 0th index causes the error. [1] - https://github.com/odoo/enterprise/blob/de7be49fc3b4e7c6e1fb4685310b2dfe6175f1ba/web_studio/controllers/report.py#L101 This commit solves this issue by only accessing the element if it exists. sentry-4906237156
This update resolves an issue where the Document Editor would throw an error when users entered local file URLs. The fix ensures that invalid URLs are handled gracefully, preventing errors and improving the user experience when adding documents to website content. This improves stability and usability for website editors.
Original PR description
Currently, an error occurs when entering a URL for the Document on the website. Steps to Reproduce: - Install the `Website` module. - Go to the `Website` and click `Edit`. - Insert an `image` block.…
Currently, an error occurs when entering a URL for the Document on the website. Steps to Reproduce: - Install the `Website` module. - Go to the `Website` and click `Edit`. - Insert an `image` block. - Double-click on the image > `Documents` > enter this URL: `file:///C:/Users/sagar/Downloads/op.webp` `InvalidSchema: No connection adapters were found for 'file:///C:/Users/sagar/Downloads/op.webp'` This error occurs when the user enters a URL that does not point to a valid document or does not follow a valid schema. This caused an exception in the HEAD request during header retrieval [1]. [1] https://github.com/odoo/odoo/blob/07626050bd0104fecd8799b56d30245d00da3f27/addons/html_editor/controllers/main.py#L255 This commit ensures that the URL is evaluated safely during the HEAD request. If the user enters a document URL with a invalid schema, a UserError is raised. sentry-6726490037 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a bug that caused Odoo to crash when processing records with invalid UTF-8 characters, often found in image attachments. The fix automatically handles these characters during JSON serialization, ensuring data integrity and preventing system errors. This improves stability and reliability.
Original PR description
The system would crash when attempting to open the `data` of a record containing `invalid UTF-8` bytes (e.g., binary fields such as images or file attachments). **Steps to produce:-** - Activate the `developer mode`. - `Settings > Technical > Database Structure > Attchments`. - Click on `New` and upload any `image`. - Click on the `bug icon` and click on `data`. **Error:-** `UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc9 in position 5: invalid continuation byte` **Solution:-** - The fix updates `json_default` to decode bytes using `errors='ignore'`, preventing crashes from invalid UTF-8 during JSON serialization. **Sentry - 6644599805** I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a crash that occurred when users uploaded certificate files in unsupported formats. The system now validates certificate formats to ensure they are either .der, .pkcs12, or .pem, preventing errors and maintaining data integrity. This ensures smooth operation of DIAN configuration.
Original PR description
The system crashes with the error because a certificate record exists (cert_sudo is not None), but the pem_certificate field is False. This is because of a user uploaded invalid format certificate.…
The system crashes with the error because a certificate record exists (cert_sudo is not None), but the pem_certificate field is False. This is because of a user uploaded invalid format certificate.
**Steps to Produce:-**
1. Install `l10n_co_edi` then change the company to `co company`.
2. `Settings > Certificates and Keys > Manage Your Certificates > Certificates`.
3. Add a new certificate using an invalid file (`other than .der, .pkcs12, or .pem content format`)and fill in the other required details.
4. Open any journal of type Sales or Purchase.
5. Go to `Advanced Settings` and click the `Reload DIAN Configuration` button.
**Traceback:-**
```py
File "/home/odoo/odoo18/community/odoo/http.py", line 2554, in __call__
response = request._serve_db()
File "/home/odoo/odoo18/community/odoo/http.py", line 2081, in _serve_db
return self._transactioning(
File "/home/odoo/odoo18/community/odoo/http.py", line 2144, in _transactioning
return service_model.retrying(func, env=self.env)
File "/home/odoo/odoo18/community/odoo/service/model.py", line 156, in retrying
result = func()
File "/home/odoo/odoo18/community/odoo/http.py", line 2111, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/home/odoo/odoo18/community/odoo/http.py", line 2359, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "/home/odoo/odoo18/community/odoo/addons/base/models/ir_http.py", line 333, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/odoo18/community/odoo/http.py", line 754, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/odoo18/community/addons/web/controllers/dataset.py", line 42, in call_button
action = call_kw(request.env[model], method, args, kwargs)
File "/home/odoo/odoo18/community/odoo/api.py", line 535, in call_kw
result = getattr(recs, name)(*args, **kwargs)
File "/home/odoo/odoo18/enterprise/l10n_co_dian/models/account_journal.py", line 129, in button_l10n_co_dian_fetch_numbering_range
response = xml_utils._build_and_send_request(
File "/home/odoo/odoo18/enterprise/l10n_co_dian/xml_utils.py", line 133, in _build_and_send_request
'binary_security_token': cert_sudo._get_der_certificate_bytes(formatting='base64').decode(),
File "/home/odoo/odoo18/community/addons/certificate/models/certificate.py", line 282, in _get_der_certificate_bytes
cert = x509.load_pem_x509_certificate(base64.b64decode(self.with_context(bin_size=False).pem_certificate))
File "/usr/lib/python3.10/base64.py", line 80, in b64decode
s = _bytes_from_decode_data(s)
File "/usr/lib/python3.10/base64.py", line 45, in _bytes_from_decode_data
raise TypeError("argument should be a bytes-like object or ASCII "
TypeError: argument should be a bytes-like object or ASCII string, not 'bool'
```
**Solution:-**
- We added a constraint method to ensure that the `content_format` of a certificate is one of the allowed types: `'der', 'pkcs12', or 'pem'`. This helps prevent saving records with unsupported or invalid certificate formats.
**Sentry - 6373511231,6842736554,6851901831**
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update replaces a broken video snippet used on the website with a new, publicly available version. Previously, the original video was no longer accessible, causing a display issue. This change ensures the website's video content is consistently available to users.
Original PR description
Specification: - The previously embedded video used by the "s_video" snippet (id=G8b4UZIcTfg) is no longer publicly available. After this commit: - This commit replaces the default video with a new publicly available one (id=nbso3NVz3p8). task-6034987 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253874
This update resolves a problem that occurred when uninstalling the Repair module, specifically related to data cleanup. The issue stemmed from lingering inventory data interfering with the deletion of a selection field, causing an error. The fix ensures that related data is properly removed during module uninstallation.
Original PR description
This error occurs when Repair Module is uninstalled but the Inventory module still has the master data (some stock rules), so this results into the selection field value `repair_operation` not being able to get deleted, even with having an ondelete attribute defined in field definition. Steps to replicate: - Install `Repairs` & `Inventory`, uninstall `Repairs`. - Open `Inventory > Configuration > Operation Types` and click on any of the records other than `Repairs`. - Under the `General` page, change Type of Operation to `Repairs` and watch the error occur. `ValueError: Wrong value for stock.picking.type.code: 'repair_operation'` Solution: - To solve this error, added `ondelete='cascade'` to safely unlink all the `stock.rule` that interrupt the deletion of selection value `repair_operation`. sentry-6562294139 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves a problem where a key save operation wasn't triggered within the Web Studio interface when the view's visibility changed. The fix ensures the save function is called correctly under these circumstances, preventing a test case failure and maintaining the stability of the Web Studio feature. This ensures consistent behavior and reliable operation.
Original PR description
This commit [1], avoided the save on form view when studio activated and `visibilitychange` event is called. But after the fix [2], the save is not called on `visibilitychange` event unless the form is dirty and this caused the testcase to fail. [1]: https://github.com/odoo/enterprise/pull/69474/commits/87b0ad3c3b89a3a6daeb6f50b96c23c1228d56d7 [2]: https://github.com/odoo/odoo/pull/223702 sentry-6831823426
This update resolves an issue where users could trigger an error when entering an incorrect model name in the snailmail letter creation process. The fix adds a check to ensure the specified model exists, improving stability and preventing data entry failures. This ensures users can consistently create snailmail letters without encountering errors.
Original PR description
Currently, an error occurs when user writes an invalid model name in snailmail. Steps to replicate: - Install mail and open snailmail letters. - Type `test` in the model field, add a recipient and…
Currently, an error occurs when user writes an invalid model name in snailmail. Steps to replicate: - Install mail and open snailmail letters. - Type `test` in the model field, add a recipient and save. Error: `KeyError: 'test'` Cause: - As the model name was given as `test` the [line] throws error as no model with the name 'test' exists in the environment. Solution: - Added a function to check if the model exists in the environment, along with an existence check for the document ID. - Also added a compatibility check to ensure the model works with snailmail. Note: - In this scenario where the `create()` method is overridden and the error occurs before the `super()` call, we cannot add a python constraint as the constrains are called by the `_create()` in the orm. [1] -> [2] [2] -> [3] [3] -> [4] [1]: https://github.com/odoo/odoo/blob/9d965abb992d558ea4235ef5f87a7654c6f1ceae/odoo/orm/models.py#L4705-L4706 [2]: https://github.com/odoo/odoo/blob/d088dbad84492234ae792b76545497c6cd62e4f4/odoo/orm/models.py#L4943-L4944 [3]: https://github.com/odoo/odoo/blob/d088dbad84492234ae792b76545497c6cd62e4f4/odoo/orm/models.py#L1253-L1258 [4]: https://github.com/odoo/odoo/blob/d088dbad84492234ae792b76545497c6cd62e4f4/odoo/orm/models.py#L518-L520 [line]: https://github.com/odoo/odoo/blob/e8a41b5b50ac71974d98c18fa9d47e37e0f7763f/addons/snailmail/models/snailmail_letter.py#L92 sentry-7151105998 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue causing a misleading warning about the Construction Industry Scheme (CIS) for certain vendor bills. The fix ensures that CIS checks are applied correctly only to purchase-related documents, preventing unnecessary alerts when using the Cash Basis accounting method. This improves the user experience and data accuracy.
Original PR description
Currently, journal entries may be flagged for the CIS inactive partner check, causing unnecessary warning. Steps to reproduce: - Install l10n_uk_reports_cis. - Accounting > Configuration > Settings, enable "Cash Basis" - Open "20% CIS" Purchase tax - Set "Tax Exigibility" to "Based on Payment" and add a Cash Basis Transition Account - Set Outstanding account on the Bank journal - Create a partner and enable (Accounting tab) Construction Industry Scheme" - Create a vendor bill for this partner with a the 20% CIS tax - Register payment to the Bank journal - Open the created CABA entry Issue: Warning will be shown "Construction Industry Scheme hasn't been enabled for this vendor." Analysis: The warning flag is incorrectly triggered because the CABA entry has `invoice_line_ids` field set. However entries should be excluded by this check as it should only apply to purchase-related documents. opw-5942603
This update removes unnecessary complexity in how Odoo handles electronic invoices from Belgium (BE). Previously, the system was switching between different invoice formats, which is no longer needed as the standard 0208 format is now used. This simplifies the system and ensures consistent invoice processing.
Original PR description
When adding peppol, we didn't know if we needed to use the 9925:BE or 0208. Therefore, we switched between them if the endpoint was not found. This has no more use today as we use 0208. opw-5976574 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260473 Forward-Port-Of: odoo/odoo#258297
This update corrects a formatting issue in the e-waybill document date field. Previously, the date displayed included the time, which is not the required format. This change ensures consistent and accurate date display for e-waybill documents.
Original PR description
The `document_date` field in e-waybill form view previously included both date and time, which is not as per the expected format. This fix ensures that only the date is shown, hiding the time component. Forward-Port-Of: odoo/odoo#259656
This update fixes a bug where users could falsely validate signatures in draw mode using Firefox and similar browsers. Now, the system requires a visible signature drawing before validation, ensuring signatures are legitimate and preventing fraudulent confirmations.
Original PR description
On Firefox and similar browsers, it was possible in some cases to validate a signature field in draw mode without actually drawing a signature, allowing the document signature to be confirmed with an empty signature. This change ensures that a signature field in draw mode can only be validated when the signer has effectively drawn a visible signature. task-6117312 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
This update addresses a technical issue related to Odoo's integration with Peppol, a European network for electronic invoicing. By adding a new field to track the status of Peppol moves, the system can now accurately determine if invoices were sent through Peppol. This change enhances future flexibility as Peppol continues to evolve and support new response types.
Original PR description
With the addition of new peppol_move_state for the Application Responses in Peppol, some checks to know wether the move was sent through Peppol were not updated. This commit does that by adding a common field for it. This is usefull as we might add some extra peppol_move_state values in the near future (Peppol supports more response types than we currently offer to our users).
This update corrects a mismatch in how transaction IDs are reported in financial export files (FAIA). Previously, the system used different identifiers for invoices and purchase invoices, leading to potential reporting errors. This change ensures all transaction IDs align, improving the accuracy and reliability of financial reports.
Original PR description
The Invoice/TransactionID element in SourceDocuments/SalesInvoices and SourceDocuments/PurchaseInvoices must match the corresponding Transaction/TransactionID in the GeneralLedgerEntries section. As the latter uses the entry name since PR odoo#58728, the former should too. opw-6111343, opw-542729
This update resolves an issue where the minimum IS (Investment Savings) amount was incorrectly calculated in the Swiss payroll module. The change ensures accurate reporting of IS contributions for Swiss employees, aligning with local tax regulations. This improves the reliability of payroll data and compliance.
Original PR description
Forward-Port-Of: odoo/enterprise#114463
This update fixes an issue where the 'Total' line was missing from reports like the Trial Balance when 'Hide lines at 0' was enabled. The change ensures that all report totals are correctly printed, providing a more complete and accurate view of financial data.
Original PR description
When "Hide lines at 0" is enabled, printing e.g. the Trial Balance will drop the report-level "Total" line when printing. This commit fixes that. The issue was introduced in this commit[^1], which didn't consider total lines without a parent (i.e. root total lines). [^1]: https://github.com/odoo/enterprise/commit/7fec18b99eb2aa5ebc357dcad5f95f234db5b7d8 Forward-Port-Of: odoo/enterprise#114084
This update simplifies the process for creating Unsplash attachments, reducing code complexity and improving security. Previously, broad access rights were required, but now only the necessary permission to set the attachment URL is granted, ensuring better control over data access.
Original PR description
Only grant `sudo` to set the attachment `url` rather than applying sudo on the whole `.create` dict The purpose of the previous `_can_bypass_rights_on_media_dialog` was to allow employees uploading unsplash images to be able to create an attachment with an `url` while being a `type='binary'`, for the images to be able to be served with the URL `/unsplash/...`. Just applying `sudo` at the right needed spot rather than on the whole `create` requires less code to achieve the same goal. Forward-Port-Of: odoo/odoo#261056