Daily updates from Odoo
Friday, November 28, 2025
19 changes · master
Enhancements to existing features
This update enhances the testing process for Odoo's email functionality. Specifically, it ensures all 'discuss' tests are run against a more recent server version (99.9), leading to more reliable and accurate test results. This improves the overall stability and performance of Odoo's email features.
Original PR description
https://github.com/odoo/odoo/pull/236704
This update adds a new feature to the Odoo VoIP app, allowing users to insert special characters by long-pressing keys on the keypad. This improves user input flexibility and efficiency when composing messages. It addresses a usability enhancement for the VoIP functionality.
Original PR description
Purpose: Long pressing a key should allow users to insert special characters. Specification: Implemented long press functionality on the keypad to allow users to hold down a key for a longer duration to insert special characters. Task-4949083
This update introduces automated closing reminders for helpdesk tickets based on inactivity and configurable delay settings. Teams can now set a reminder delay and inactivity period, ensuring tickets are marked as closed after a defined timeframe. This improves efficiency by reducing manual follow-up and preventing outdated tickets.
Original PR description
- Add an 'Auto-Close Reminder' option in the helpdesk team settings - Raise the following error if the `auto-close reminder delay` is greater than the `auto-close inactivity period` --- task-5149365
Resolved issues and error corrections
This update fixes an issue where subscription invoices weren't being updated correctly when products weren't delivered. Previously, the system would incorrectly report 'Automatic renewal succeeded' messages daily. Now, invoice dates are accurately adjusted, ensuring proper subscription billing and reducing unnecessary notifications.
Original PR description
Before this commit, when a product invoiced based on delviered quantity was not delivered, the subscription cron would detect the free period but the next invoice date would not be incremented. As a result, the cron would run every day and post a 'Automatic renewal succeeded. Free subscription.' message in the chatter. task-5345944 Forward-Port-Of: odoo/enterprise#100571
This update fixes a usability issue where product options and filters on the product page consistently appeared as the first selection choices. This change ensures a more intuitive user experience for sales and purchase workflows, making it easier for users to find and select the desired products.
Original PR description
For the options (checkbox on the product page) and the filters on the products page. task-5177171
This update corrects a display issue where call durations were sometimes shown with incorrect decimal precision. The fix ensures that call durations are accurately represented in seconds, preventing misinterpretations of call times. This improves the reliability of call reporting and analysis.
Original PR description
Sometimes, the seconds of the duration appear as a floating point number in the call summary page. This happens because the duration in the database is stored in hours. So when converting it, at…
Sometimes, the seconds of the duration appear as a floating point number in the call summary page. This happens because the duration in the database is stored in hours. So when converting it, at creation, from seconds to hours, you can have an irrational number. For example, if the call lasted 3 seconds: 3/3600=0.00083333333... This number has infinite repeating digits, and then an approximation is stored. When the JS frontend receives the approximation value and multiples it back by 36000 to get the seconds: 0.0008333333334*3600 might result in 2.999999999 instead of 3. This commit fixes that by rounding the seconds after being multiplied in the frontend. [Task-5363712 ](https://www.odoo.com/odoo/project/5778/tasks/5363712)<img width="418" height="266" alt="image" src="https://github.com/user-attachments/assets/4f17721f-55c5-40b9-81b1-7c75f7ee6158" /> <img width="438" height="457" alt="image" src="https://github.com/user-attachments/assets/68de4ea2-1e97-4fe3-be61-0a728317f6ae" />
This update prevents kiosks from attempting to use payment methods that haven't been specifically set up. Previously, kiosks would incorrectly prompt for online payments, even when none were configured. This change ensures kiosks only utilize authorized payment options, improving the customer experience and preventing errors.
Original PR description
Ensure the kiosk only uses payment methods that are explicitly configured. **Steps to reproduce:** - Set up an online payment method (do not assign it to the kiosk) - Open a kiosk session. - Try to validate an order. **Issue:** - The kiosk prompts for an online payment method, even though none are configured. **Fix:** - Prevent loading of any unconfigured payment methods to the kiosk. Task: 4911495 Related: https://github.com/odoo/odoo/pull/217467 Forward-Port-Of: odoo/enterprise#100605 Forward-Port-Of: odoo/enterprise#89490
This update resolves an issue where creating annotations in Arabic language reports would generate an error due to incorrect date formatting. The fix ensures dates are formatted using the standard Latin numbering system, preventing the error and allowing users to correctly annotate Arabic-language accounting reports. This improves the reliability of the reporting functionality for Arabic-speaking users.
Original PR description
Steps to reproduce: ------------------- 1. Install `account_reports` 2. Switch the user language to Arabic 3. Go to Accounting > Reporting > General Ledger 4. Click on the 3-dots > Annotate 5. Create a new annotation Issue: ------ A traceback occurs: ```python psycopg2.errors.InvalidDatetimeFormat: invalid input syntax for type date: "٢٠٢٥-١١-٣٠" LINE 1: ... '2025-11-14 07:05:06.400902', 2, '٢٠٢٥-١١-٣٠', ... ``` Cause: ------ In Arabic locale, Luxon formats dates using the Arabic numbering system, which is not a valid date literal for PostgreSQL, leading to an invalid date syntax error. Solution: --------- Use the Latin numbering system (`latn`) when formatting the annotation date. Ticket [link](https://www.odoo.com/odoo/project.task/5244656) opw-5244656 Forward-Port-Of: odoo/enterprise#100380 Forward-Port-Of: odoo/enterprise#99493
This update resolves a broken unit test for Mexican trial balance reports due to recent account changes. It also clarifies naming conventions within UK reporting modules to prevent conflicts and ensure proper functionality. These changes improve the accuracy and stability of financial reporting for Mexico and the UK.
Original PR description
This commit fixes the Mexican trial balance unit test that was broken due to newly added accounts in Mexican CoA. It also renames methods from _get_uk_... to _get_uk_reports_... in l10n_uk_reports_cis to avoid overriding the methods in l10n_uk module. task-5176658 Forward-Port-Of: odoo/enterprise#98779
This update resolves an issue where simplified reports were generating duplicate closing entries, potentially causing accounting discrepancies. The fix ensures accurate report generation by preventing the creation of redundant entries. A more comprehensive solution for handling return selection is planned for a future task.
Original PR description
The full and simplified reports will generate 2 identical closing entries. A better solution to choose which return to use will be done in the task 5232715 task-5123564 Forward-Port-Of: odoo/enterprise#99814
This update fixes an issue where the PDF report title for DIAN support documents was incorrectly displaying 'Factura Electrónica de Venta' after DIAN approval. The change adjusts the report naming logic to ensure the correct 'Documento Soporte' title is consistently used, aligning with DIAN requirements.
Original PR description
Steps: - Create and confirm a vendor bill with 'DIAN Support Documents' journal - Print the PDF — it display 'Documento Soporte' as document title - Send the document to the DIAN and print it again -> the returned PDF with the DIAN stamp now shows 'Factura Electrónica de Venta', it should still be 'Documento Soporte' Cause: In `AccountMove._get_name_invoice_report` we return the name of the report depending on specific conditions, but the order of the conditions prevent to get the right report name as soon as the document has been accepted by DIAN. Fix: Modifying the order of the condition, to redirect to the right report, even when the support document has been accepted by DIAN opw-5119858 Forward-Port-Of: odoo/enterprise#100656 Forward-Port-Of: odoo/enterprise#99028
This update fixes an error that occurred when users removed all overtime rules and then installed the 'hr_work_entry_attendance' module. The fix ensures the module installs correctly by preventing attempts to create missing records, improving stability and usability.
Original PR description
Currently a `ParseError` arises when the user installs the `hr_work_entry_attendance` module after deleting all `Overtime Rules' in the 'Rulesets` Configuration. Steps to reproduce: --- - Install…
Currently a `ParseError` arises when the user installs the `hr_work_entry_attendance` module after deleting all `Overtime Rules' in the 'Rulesets` Configuration.
Steps to reproduce:
---
- Install `hr_attendance` module(without demo)
- Attendance > Configurations > Overtime Rulesets
- Delete all `Overtime Rules` in `Default Ruleset`
- Now install `hr_work_entry_attendance` module
Traceback:
---
```py
Exception: Cannot update missing record 'hr_attendance.hr_attendance_overtime_employee_schedule_rule'
ParseError
while parsing /home/odoo/src/enterprise/19.0/hr_work_entry_attendance/data/hr_attendance_overtime_rule_data.xml:4, somewhere inside <record id="hr_attendance.hr_attendance_overtime_employee_schedule_rule" model="hr.attendance.overtime.rule">
<field name="work_entry_type_id" model="hr.attendance.overtime.rule" eval="obj()._get_default_work_entry_type_id()"/>
</record>
```
The error occurs because the user deleted all `Overtime Rules` and then installed the `hr_work_entry_attendance` module. which requires particular records.
This commit solves the above issue by using `noupdate="1"`and `forcecreate="0"` to skip the creation of record if it doesn't exists.
https://github.com/odoo/odoo/blob/b794f0f332f473deb2c04eba60baf4761db3b508/odoo/tools/convert.py#L364-L366
sentry-7023182659
Forward-Port-Of: odoo/enterprise#99347This update fixes an issue where selecting a document in dark mode resulted in a white background obscuring the text. The fix dynamically adjusts the background color based on the selected theme, ensuring clear visibility for all users.
Original PR description
**Steps:** - open documents in list view in dark mode - select and deselect a record **Observation:** - the selected record's background becomes white and text was already white - hence nothing can…
**Steps:** - open documents in list view in dark mode - select and deselect a record **Observation:** - the selected record's background becomes white and text was already white - hence nothing can be seen clearly **Cause:** - Commit [1] introduces a scss change for list view, but used hardcoded values for color, which works well for light mode but not in dark mode https://github.com/odoo/enterprise/blob/f73626fa778fd96de213a0fae61ced6fd5012d36/documents/static/src/scss/documents_views.scss#L29-L36 [1]: https://github.com/odoo/enterprise/commit/009fddcd20b0e7b81b8959f73e39d840d96167c7 **Fix:** - instead of hardcoding color, we use already available variable, which adjust the color, according to theme. **Before:** <img width="1150" height="176" alt="image" src="https://github.com/user-attachments/assets/33d0688c-d9cd-4266-bcc8-189e830bc391" /> <img width="1319" height="203" alt="image" src="https://github.com/user-attachments/assets/cd8fa68e-76ff-411d-8d37-4e61e2ce99e8" /> <br><br> **After:** <img width="1028" height="141" alt="image" src="https://github.com/user-attachments/assets/470365b0-c18f-497d-b3b2-11cd8fea371a" /> <img width="996" height="164" alt="image" src="https://github.com/user-attachments/assets/74d6b71b-852e-41ee-acb3-4b58d8eace9e" /> opw-5261669 Forward-Port-Of: odoo/enterprise#100665 Forward-Port-Of: odoo/enterprise#100114
A technical issue causing a traceback when accessing the Documents app on mobile devices has been resolved. This fix ensures the Documents app functions correctly across different mobile views, improving user experience. The change was a result of adapting code from a related forward port.
Original PR description
Steps to reproduce =================== 1. Toggle mobile view. 2. Open documents app. List prop is replaced by groupByField here https://github.com/odoo/odoo/pull/189109/commits/b5e821f0383caf6126a0d3c915cb4bccc8345b2b in 18.2. Here https://github.com/odoo/enterprise/pull/90647, we missed adapting the code in the forward port. Task-5363758 Forward-Port-Of: odoo/enterprise#100713
This update corrects a visual issue in the US Check Printing layout where the payment date would overlap with the table below it. The fix ensures the date is always displayed correctly, preventing overlapping elements in the generated check PDF. This improves the clarity and professionalism of vendor bills.
Original PR description
In the Accounting app, users can print checks created to pay Vendor Bills. When using any of the US Checks Layout (from `l10n_us_check_printing`), the payment date would overlap the table beneath it…
In the Accounting app, users can print checks created to
pay Vendor Bills. When using any of the US Checks Layout (from
`l10n_us_check_printing`), the payment date would overlap
the table beneath it when the journal's manual sequencing option was
disabled.
<img width="1201" height="624" alt="image" src="https://github.com/user-attachments/assets/cd3aa46a-1952-4652-9034-e4bc2ea9a44d" />
This occured because the `.summary_line` container collapsed to a height
of 0 whenever its first child wasn't displayed, as the remaining child
elements are absolutely positioned and therefore do not contribute to
the parent's height.
https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/l10n_us_check_printing/report/print_check.xml#L24-L34
By assigning a minimum height to the `.summary_line` class, we make sure
that it always occupies space above the table, even when only the date
is shown.
### Steps to reproduce:
**/!\ To reproduce the bug locally, you must have a version of wkhtmltopdf with patched qt. Use `wkhtmltopdf -V` and make sure that _"(with patched qt)"_ is specified after your wkhtmltopdf version.**
1. Install Accounting (`accountant`) and US Checks Layout (`l10n_us_check_printing`)
2. In Settings > Accounting, toggle on *Checks* if it is not, and set *Check Layout* to any "US" layout.
3. Go to Accounting > Vendors > Bills
4. Create a new Vendor Bill:
- Set any Vendor
- Set any Bill Date
- Add any Product (with a positive price, the total price of the bill must be positive)
- Confirm
5. Click *Pay*, set the *Payment Method* to *Checks* and click *Create Payment*
6. Click on the *Payments* smart button
7. Click *Print Check* > *Print* (> *Continue*)
8. In the generated PDF, the date overlaps the table beneath it.
This fix moves the date right above the table.
<img width="1189" height="634" alt="image" src="https://github.com/user-attachments/assets/8858098e-b39b-4ad2-aa65-cc0cea550343" />
opw-5165112
Forward-Port-Of: odoo/enterprise#100487This update fixes a bug where the 'Late,' 'Today,' and 'Future' filters in the Activity Menu didn't correctly filter Approval requests. The fix adds necessary filters to the Approvals search view, ensuring these filters now function as expected and align with other Odoo modules.
Original PR description
Issue: - In the Activity Menu, clicking "Late", "Today", or "Future" did not filter Approval requests and always returned all records. - The Approvals search view lacked the activity filters that these context defaults rely on. Fix: - Added the invisible activity filters (overdue, today, upcoming_all) to the Approvals search view. - Filters use `my_activity_date_deadline` to match Odoo's standard deadline-based activity filtering. Impact: - Activity Menu filtering now works correctly for Approvals and aligns with behavior in other modules. Task: 5261406 Forward-Port-Of: odoo/enterprise#100627 Forward-Port-Of: odoo/enterprise#99632
This update resolves a technical issue where demo orders for the UrbanPiper module were failing due to missing date and delivery date information. The commit adds these essential fields to the demo order data, ensuring proper functionality and preventing errors when running demo scenarios.
Original PR description
Before this commit: ==== - On clicking (i) button on demo orders of urbanpiper leads to tb due to missing datetime fields in demo data. Following this commit: ==== - `created` and `delivery_datetime` has been inserted for demo orders also. task-5364917
Features or functions removed from Odoo
This update corrects a technical issue where a reporting function was mistakenly reintroduced in the Italian and Philippines versions of Odoo Enterprise. The function was previously moved to report options, and a subsequent forward port incorrectly re-added it. This change ensures consistency and avoids potential errors in reporting.
Original PR description
the function _get_custom_display_config was switched to the options on reports in this commit, https://github.com/odoo/enterprise/commit/162d2326b2bd4e78aa742ae7bdd125150faf3e08. Unfortunately, some forward ports missed it and added back this function for both l10n_it and l10n_ph. Forward-Port-Of: odoo/enterprise#100638
Code cleanup and technical improvements
This update removes unnecessary parameters from mobile email URLs, a change required due to the upcoming shutdown of Firebase Dynamic Links on August 25th, 2025. This refactoring improves the efficiency of our mobile email functionality and ensures continued compatibility after the FDL deprecation.
Original PR description
Since the migration on the service due to the deprecation of Firebase Dynamic Links (FDL). Some params in the URL are not needed anymore. This commit removes these params. > On August 25th, 2025, Firebase Dynamic Links will shut down. https://firebase.google.com/support/dynamic-links-faq