Monday, September 1, 2025
14 changes · saas-18.2
Resolved issues and error corrections
Users can now sort subtasks by the My Deadline column without causing an error when saving the parent task. This prevents an interruption in project task management when working with deadline-related activity information.
Original PR description
Currently, an error occurs when a user tries to add a sub-task and try to sort subtasks w.r.t `My Deadline` column (which is not stored) before saving. **Steps to produce:** - Install the `project`…
Currently, an error occurs when a user tries to add a sub-task and try to sort subtasks w.r.t `My Deadline` column (which is not stored) before saving. **Steps to produce:** - Install the `project` module. - Navigate to `Project > Tasks > All Tasks` and open any task. - In the Sub-tasks page, unhide the `My Deadline` field. - `Add a line` and sort subtasks w.r.t `My Deadline`, then try to `save`. **Error:** `ValueError: Cannot convert project.task.my_activity_date_deadline to SQL` `because it is not stored` **Root Cause:** The `my_activity_date_deadline` field on the Task model is computed and not stored in the database. When a user sorts a sub-task list by this column and then saves the parent task,at [1] the odoo tries to reload the list with a SQL `ORDER BY` clause on this non-existent column. The ORM cannot translate a non-stored field into SQL for ordering, which causes the ValueError. [1]- https://github.com/odoo/odoo/blob/39b232d640d9e1e09d10e4984ebe419dbe885393/odoo/orm/models.py#L5625-L5626 Used Reference: In CRM Lead `my_activity_date_deadline` is also used for sorting in the list view, but handled it's sorting manually by overriding `search_fetch` method as shown below: https://github.com/odoo/odoo/blob/39b232d640d9e1e09d10e4984ebe419dbe885393/addons/crm/models/crm_lead.py#L782-L788 **Solution:** This commit makes the `my_activity_date_deadline field` sortable by overriding the `search_fetch` method on the project.task model. sentry - 6604203533
Country matching now safely handles imported values that are dates or other non-text formats. This prevents the contact import test from crashing when a country column contains incorrectly formatted data, improving reliability for users validating imports.
Original PR description
The system will crash if the `name` input is of type `datetime.time` or any other object, rather than a string, during the country search.
**Steps to Reproduce:**
1. Go to Contacts > Import Contacts.
2. Import the data and assign the `Odoo field` as `Country`, where the `file column` contains entries in `date format`.
3. Click the `Test` button.
**Error Message:**
`TypeError: object of type 'datetime.date' has no len()`
**Solution:**
- Ensure that the `name` is a string to prevent type errors. If the input is not a string, it defaults to an empty string ('').
**Sentry** - 6594489459
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe Recruitment app now checks whether its sample scenario data has already been loaded before running the load action. This prevents errors when users accidentally run the same action more than once, keeping the setup process smoother.
Original PR description
Currently, an error occurs when the user attempts load scenario data through a server action. Steps to replicate: - Go to `Server Actions > search `Load Demo Data` > Create contextual action`. - Go…
Currently, an error occurs when the user attempts load scenario data through a server action.
Steps to replicate:
- Go to `Server Actions > search `Load Demo Data` > Create contextual action`.
- Go to Recruitment > go to Job Positions form view > Run the server action twice, and you will get the error.
Error:
`ValueError: ParseError('while parsing /home/odoo/odoo18/community/addons/...')` `UniqueViolation: duplicate key value violates unique constraint 'documents_document_attachment_unique'`
This error occurs due to a unique constraint on documents, which causes a uniqueness violation on ir.attachment [1] when attempting to import the same record twice.
This commit fixes the issue by checking if the scenario data has already been imported. If it has, the import is skipped to prevent uniqueness violation.
[1]-https://github.com/odoo/odoo/blob/4b4fb5b9a655db4d3b9adb8d6a875f01d27a4806/addons/hr_recruitment/data/scenarios/hr_recruitment_scenario.xml#L194
sentry-6636243614
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe Point of Sale tax control button now appears only when relevant settings are enabled, avoiding confusion for restaurant users who do not use flexible taxes. The tax selection pop-up also now shows a clear title explaining that the user should choose the tax to apply.
Original PR description
Before this commit: =================== - When only point_of_sale is installed, the tax control button is visible only if `Flexible Tax` is enabled. But with pos_restaurant installed, the button is always visible, even if Flexible Tax is disabled. - Also, the tax selection dialog had an incorrect title: `Please register the voucher number`. After this commit: ================== - In point of sale, the tax control button will be visible if `Flexible Tax` is enabled, and in restaurant mode, the button will be visible if the `Flexible Tax` or `Takeout/Delivery` is enabled. - The tax selection dialog title has been updated to: `Choose the tax you want to apply`. Task: 4937977 Forward-Port-Of: odoo/odoo#218815
The email composer now filters template suggestions so users only see templates assigned to them or shared with everyone. This prevents templates meant for another employee from appearing in a user's sales quotation email workflow.
Original PR description
**Steps to reproduce:** 1. Install Sales. 2. Create an email template for the 'sale.order' model and assign it to the admin user under the settings page in the 'User' field. 3. Log in as the demo…
**Steps to reproduce:** 1. Install Sales. 2. Create an email template for the 'sale.order' model and assign it to the admin user under the settings page in the 'User' field. 3. Log in as the demo user. 4. Create a quotation and click the 'Send by Email' button. 5. In the wizard, click the three dots between the attachment and AI logo in the footer. 6. Observe the templates list. **Issue:** - The template created for the admin user appears for the demo user as well. **Cause:** https://github.com/odoo/odoo/blob/07626050bd0104fecd8799b56d30245d00da3f27/addons/mail/static/src/core/web/mail_composer_template_selector.js#L31-L44 - The domain used to fetch templates was incorrectly filtering for templates assigned to any user (instead of filtering for templates assigned to the current user or not assigned at all). **Solution:** - Corrected the domain to include only templates assigned to the current user and not assigned to anyone. opw-4901492 Forward-Port-Of: odoo/odoo#217641
The Saudi localization now shows the “THIS IS NOT A LEGAL DOCUMENT” warning only on applicable customer invoice documents when the QR code is missing. Vendor bills, vendor credit/debit notes, purchase receipts, and sales receipts no longer display this misleading warning, reducing confusion for accounting users.
Original PR description
Before this commit: - The message "THIS IS NOT A LEGAL DOCUMENT" was also displayed on Vendor Debit Notes, Vendor Credit Notes, Purchase Receipt and Sales Receipt. - The warning should only appear on Customer Invoices, Credit Notes, and Debit Notes when the QR code is missing After this commit: - The warning message is no longer displayed on all Vendor Debit Notes, Vendor Credit Notes, Purchase Receipt and Sales Receipt. Task-5044870 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224473
Fixed an issue where users could not open the full list of calendar events on non-working days because the click opened the event creation popover instead. This improves calendar usability when many events are scheduled on an off-day.
Original PR description
**PROBLEM** If you add a lot of daily event on a off-day, the "show more" link to show all events is not clickable. Clicking bring the event creation popover. **REPRO STEPS** 1. install calendar and hr. 2. on a off day (grey background) in the week or day view, add events until the "show more" link shows up. 3. click on it, and notice the event creation popover pops up instead of the event list popover. **CAUSE** FullCalendar css class fc-non-business have a zindex of 1, a div with this class is "above" the link. **FIX** Removing a line that removed the css class fc-daygrid-more-link to the "more-link" element. Modifying css to keep the style consistent even with this new class. opw-4844719 Forward-Port-Of: odoo/odoo#221007
Purchase orders now consistently show both the vendor’s product name and the internal product name across all pages. This helps buyers avoid confusion when reviewing multi-page purchase orders while preserving the ability to search by vendor code.
Original PR description
#### Issue: Only the vendor name of a product is displayed on a purchase order on all pages except the first one. #### Step to reproduce: - make sure "Variant grid entries" is disabled in the…
#### Issue: Only the vendor name of a product is displayed on a purchase order on all pages except the first one. #### Step to reproduce: - make sure "Variant grid entries" is disabled in the settings. If you can't disable it, you can disable the view `purchase.order.form.inherit.matrix` to trigger the bug. - Create a product - Go to the purchase sheet - Add a vendor - Add the field "Vendor Product Name" and "Vendor Product Code" and fill them - Create a purchase order - Add your product - Add your product a second time (on a second line) - Confirm the PO - Activate debug mode - Go to the view and add a limit to have only 1 POL per page - Return to your PO - Go to the second page #### Current behavior: - Only the vendor name is displayed #### Expected behavior: - The vendor name should appear at the top, while the db name should be displayed under as in the first page. #### Cause of the issue: On the first page, POLs data are fetch through a `web_read` on the PO, while on other pages data are fetch through `web_read` on the POLs of the page. While fetching POL data with a `web_read` the client ask for several informations including: `name` and `product_id.display_name`. If both return the same, the client show only one, else it shows the `display_name` on top and the `name` below. - `name` return the vendor name - `product_id` is fetch with the context `partner_id` which transform the `display_name` from the db_name to the Vendor name Therefore it fetches twice the vendor name and don't have the name from the db. #### Solution: - remove the `partner_id` from the context. #### Consequence: - When adding a product to the PO, the name of the product displayed in the dropdown list will be the name from the db instead of the name of the vendor. PO confirmed that consequence is OK as long as it's still possible to search for product using vendor code, which is still possible. opw-4737337 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223250
The Send & Print wizard now reliably hides the download option for users in all languages. This prevents the option from reappearing when the interface is not set to English, keeping the workflow consistent for accounting users.
Original PR description
Since 7ad7a1d976391e81eaa03be7076cc61f4a6cfcbe we don't show Download option in the Send & Print wizard. However, we were checking the tuple `(value, label)` which works only if language is set to English. With this commit, we only check the technical value opw-4965650
The quote PDF builder now skips an unnecessary encryption check when an attached PDF document is empty. This avoids a system error during document loading or validation, improving reliability without changing normal quote-building behavior.
Original PR description
If the document is empty we don't need to check for encryption. Otherwise we risk getting an error. ``` Traceback (most recent call last): File "/home/odoo/src/odoo/18.0/odoo/tools/convert.py", line…
If the document is empty we don't need to check for encryption. Otherwise we risk getting an error.
```
Traceback (most recent call last):
File "/home/odoo/src/odoo/18.0/odoo/tools/convert.py", line 544, in _tag_root
f(rec)
File "/home/odoo/src/odoo/18.0/odoo/tools/convert.py", line 444, in _tag_record
record = model._load_records([data], self.mode == 'update')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 5500, in _load_records
data['record']._load_records_write(data['values'])
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 5418, in _load_records_write
self.write(values)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 4827, in write
real_recs._validate_fields(vals, inverse_fields)
File "/home/odoo/src/odoo/18.0/odoo/models.py", line 1631, in _validate_fields
check(self)
File "/home/odoo/src/odoo/18.0/addons/sale_pdf_quote_builder/models/product_document.py", line 46, in _check_attached_on_and_datas_compatibility
utils._ensure_document_not_encrypted(base64.b64decode(doc.datas))
File "/home/odoo/src/odoo/18.0/addons/sale_pdf_quote_builder/utils.py", line 12, in _ensure_document_not_encrypted
if pdf.PdfFileReader(io.BytesIO(document), strict=False).isEncrypted:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/18.0/odoo/tools/pdf/__init__.py", line 91, in __init__
super().__init__(stream, strict)
File "/home/odoo/.local/lib/python3.12/site-packages/PyPDF2/_reader.py", line 317, in __init__
self.read(stream)
File "/home/odoo/.local/lib/python3.12/site-packages/PyPDF2/_reader.py", line 1408, in read
self._basic_validation(stream)
File "/home/odoo/.local/lib/python3.12/site-packages/PyPDF2/_reader.py", line 1449, in _basic_validation
raise EmptyFileError("Cannot read an empty file")
PyPDF2.errors.EmptyFileError: Cannot read an empty file
```
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
Forward-Port-Of: odoo/odoo#224674The Chilean electronic invoicing demo data now includes the required certificate serial number. This prevents setup-time demo users from hitting an error when testing invoice submission to the Chilean tax authority.
Original PR description
**Issue** When installing l10n_cl_ed, the `subject_serial_number` field is left empty. This causes an error when attempting to send an invoice to the SII. **Steps to Reproduce** 1. Install Accounting and l10n_cl_edi 2. Create and confirm an invoice 3. Click "Send Now to SII" 4. Error: Invalid Operation **Root Cause** The `subject_serial_number` is not set during installation, and this field is required for electronic document generation. **Fix** Restore the behavior from version 17.0 by setting a default `subject_serial_number` if it's missing and the certificate is available. This ensures the demo data is functional and allows users to test the SII integration out-of-the-box. Opw-4961801 Forward-Port-Of: odoo/enterprise#90636
The bank duplicate transaction search no longer fails when the Starting Date field is left empty. If no date is provided, the system now uses today’s date, allowing users to complete the action without an error.
Original PR description
Currently, an error occurs when attempting to find duplicate transactions in the bank. Steps to Reproduce: - Install the `Accountant` module. - In the `Accounting` Dashboard, click on `Bank`. - In…
Currently, an error occurs when attempting to find duplicate transactions in the bank.
Steps to Reproduce:
- Install the `Accountant` module.
- In the `Accounting` Dashboard, click on `Bank`.
- In Actions, click `Find Duplicate Transactions`.
- Clear the `Starting Date` and click save.
Traceback:
```py
psycopg2.errors.UndefinedFunction: operator does not exist: date >= boolean
LINE 6: AND move.date >= false
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
```
This error occurs when the system attempts to detect duplicate transactions without a `Starting Date`. During the check, it evaluates the condition `move.date >= date_from`. Since `date_from` is False, the comparison triggers an error.
This commit ensures that if the `Starting Date` is empty when finding duplicate transactions, it uses today’s date as the `Starting Date`.
Reference commit: https://github.com/odoo/enterprise/pull/87000/commits/806ab2d56952e9d0f597cf1ab36ea2f180a84323The French reports module now uses the correct account when creating reimbursement entries. This helps ensure VAT reimbursement accounting is posted accurately, reducing manual corrections and financial reporting errors.
Original PR description
This commit will change the account used for the reimbursement move. task-4932427 Forward-Port-Of: odoo/enterprise#91212
This fixes issues that caused the Sign app guided tour to stop or fail in certain cases. The tour now handles document setup and signature steps more reliably, helping users and testers complete the signing walkthrough without interruption.
Original PR description
Fix `sign_tour`. How to reproduce: 1. Go to tours in Odoo 2. Look up sign_tour 3. Click testing ( If testing stops at Sign App, change search filters or archive sign all .request records so that the…
Fix `sign_tour`.
How to reproduce:
1. Go to tours in Odoo
2. Look up sign_tour
3. Click testing ( If testing stops at Sign App, change search filters or archive sign all .request records so that the following screen displays )
<img width="780" height="591" alt="image" src="https://github.com/user-attachments/assets/b164c224-0e3e-4dce-97e6-89848263e59e" />
4. tour fails!
---
First commit
The `sign_tour` was failing after the conversion of the `sign.Template` client action to OWL. The standard `drag_and_drop` tour helper can no longer be used for automatic tour testing because the drop target is inside an iframe whose content is managed by PDF.js.
This commit fixes the tour by utilizing the custom helper function, `dragAndDropSignItemAtHeight`, to programmatically simulate the drag and drop action.
---
Second commit
The step "footer.modal-footer button.btn-primary:enabled" assumes that the Signature Dialog opened from its previous step ("Sign It" navigation button).
However, the "Sign It" navigation button does not always open the dialog.
If signing user (res.users) already has "sign_signature" data, the data will be automatically filled in to the Signature input.
Otherwise, the navigation button will open the Signature Dialog.
Luckily, we can see whether user has "sign_signature" data or not by checking if the <input data-item_type='signature'/> node has "data-auto_value" attribute or not.
We now skip the step if data-auto_value is set for signature.
---
Third commit
If `sign.template_sign_tour` has sign request, it means that the template might have a sign item because the `sign_tour` tour adds the Signature sign item to the template. (If user followed the tour)
When we're copying the sign template to trigger the template tour, we should not copy the sign item. User will be guided to add the sign item during the tour.
---
Note:
ci/security needs to be overriden as it was done for https://github.com/odoo/odoo/pull/134793#issuecomment-1711440188
---
opw-4752794
Forward-Port-Of: odoo/enterprise#91565