Daily updates from Odoo
Thursday, November 27, 2025
16 changes · master
Enhancements to existing features
This update enhances Odoo's database performance by introducing SQL aliases across various models and reports. Using aliases simplifies complex SQL queries, leading to faster data retrieval and improved system responsiveness. This change primarily focuses on internal optimizations within the database layer.
Original PR description
https://github.com/odoo/odoo/pull/234156
This update restricts the number of attendees displayed in email invitations to a maximum of 20 to prevent overly long lists. When more than 20 attendees are invited, the email will indicate '… and X more’ to manage communication clarity. This improves email readability and reduces potential issues with large attendee counts.
Original PR description
In order to avoid extremely long attendee lists, which can sometimes have hundreds of entries, limit the number of attendees shown in the various calendar.event and calendar.attendee mail templates to a maximum of 20. If more than 20, add '... and X more' where X is the number of attendees left beyond the displayed 20. COM PR: odoo/odoo#234386 Task-5059389
Resolved issues and error corrections
This update fixes a bug that occurred when a user deleted a specific partner record (Collection Center - Advance Payment Service) and then attempted to install a new language. The fix ensures the system handles the scenario where a referenced record is no longer present, preventing an error and allowing users to continue operating.
Original PR description
This error occurs when the user deletes the partner and then tries to install the new language. Steps to reproduce: --- - Install `l10n_be_reports` and switch to `BE company COA`. - Open `res.partner` and delete `Collection Center - Advance Payment Service`. - Try to install another language. Traceback: --- `ValueError: External ID not found in the system: l10n_be_reports.partner_centre_de_perception_belgium` This error appears after this [commit] because it references `partner_centre_de_perception_belgium`. If that record is deleted, an error is raised.. [commit]: https://github.com/odoo/enterprise/commit/b5a935add7090d7da8daee28618f08981de24613 sentry-7039699174 Forward-Port-Of: odoo/enterprise#99872
This update fixes an issue where the 'Out of Contract' duration was incorrectly calculated, leading to inaccurate reporting. The change ensures that contract dates align with the payslip period, providing more reliable payroll data and reducing potential discrepancies. This improves the accuracy of employee time and cost tracking.
Original PR description
### Steps to Reproduce 1. Create a contract ending early in the year (e.g., February). 2. Compute a payslip for a much later period (e.g., November). 3. The "Out of Contract" line shows an excessive number of days (counting from Feb to Nov). ### Reason The previous logic calculated the start/end dates based solely on the contract boundaries (`version.date_end + 1`), ignoring whether those dates actually fell within the current payslip's period. ### Solution Constrain the calculated "Out of Contract" dates using `max()` and `min()` to ensure they never exceed the payslip's `date_from` and `date_to`. Task: 5245301
This update fixes an issue where table numbers were difficult to see in dark mode due to similar background and table colors. The change ensures table numbers are now displayed in black, significantly improving readability and the user experience.
Original PR description
Before this commit: - In dark mode, the table number was not clearly visible because the background color and table color were too similar. After this commit: - The table number is now displayed in black for better visibility. task-5103925 Forward-Port-Of: odoo/enterprise#95446
This update resolves an issue where incoming emails weren't correctly associating with company records, leading to errors. By enforcing a company ID on quality alerts, the system now properly handles email processing and prevents data inconsistencies. This ensures accurate tracking of quality alerts based on the correct company.
Original PR description
Not having a company on the quality alert team is making incoming emails sent to the alias having a 'company_id' false, defined by the default values. If manually created, a quality alert should have…
Not having a company on the quality alert team is making incoming emails sent to the alias having a 'company_id' false, defined by the default values. If manually created, a quality alert should have a company. In order to avoid company_id issue, enforcing it to the team will add it to the default values of the alias and to the quality alert created by emails. To reproduce: 1. install `quality` 2. add a second company 3. Create 2 mail.lias.domains: company1.com company2.com And assign them to distinct company records by selecting them on the companies menu. 4. On the configuration of the quality team, add a localpart to the alias (like alias_c1, to make the address alias_c1@company1.com). Don't set a company (this field is not required anyway) 5. Send an email using the send-mail script: odoo/addons/mail/static/scripts/odoo-mailgate.py And using the `MAIL_TEMPLATE` defined in odoo/addons/test_mail/data/test_mail_data.py after setting the to the alias of the company: alias_c1@company1.com And giving a value to the following headers: - Return-path, - From, And deleting the following headers: - Cc, - Message-id 6. Error: ``` The operation cannot be completed: - Create/update: a mandatory field is not set. - Delete: another model requires the record being deleted. If possible, archive it instead. Model: Quality Alert (quality.alert) Field: Company (company_id) ``` As the company is not mandatory on the step 4. completing 159309e7c17e0ef8274d89d90bcab1b97b40023b opw-4866977
This update prevents users from attempting to record calls when the system is in demo mode. Previously, users could trigger a recording attempt even without a valid SIP session, leading to a non-functional 'record' button. This change ensures a smoother user experience and avoids unnecessary actions.
Original PR description
Follow-up of https://github.com/odoo/enterprise/commit/7832c1d72abf7e2f59fbb97df06afa0ab062da5f (see https://github.com/odoo/enterprise/pull/99428#pullrequestreview-3471602481). Instead of having a factory method for the session recorders, we now give some more responsibility to the SessionRecorder constructor itself.
This update fixes a warning appearing in the work entry planning module due to group access issues. The fix involves restructuring the module's dependencies to avoid conflicts when other modules (like hr_work_entry_enterprise) are removed or reinstalled. This ensures the work entry planning functionality continues to operate correctly.
Original PR description
purpose: solving the runbot warning happening here because of group access for `work_entry_source` field: https://runbot.odoo.com/odoo/runbot.build.error/233332 steps to reproduce: - install hr_payroll and hr_work_entry_planning - uninstall hr_work_entry_enterprise or hr_gantt -reinstall hr_work_entry_enterprise or hr_gantt fix: made the module `hr_work_entry_planning` dependant on `hr_work_entry` instead of `hr_work_entry_enterprise` so it doesn't get affected by removing `hr_work_entry_enterprise` or `hr_gantt` (it doesn't depend on anything from these modules) task-id: 5177289
This update fixes an issue where the EC Sales List report menu was incorrectly located. The menu has been moved to the data folder, ensuring it appears correctly within the Odoo Enterprise application. This improves the user experience for reporting on EC sales data.
Original PR description
The menu record was wrongly stored under views. It is now moved to the data folder.
This update fixes an issue where archived users were incorrectly sending automatic follow-up emails for invoices. The code has been updated to ensure that only active users are designated as the sender for these follow-ups, improving email reliability and preventing confusion. This change ensures that follow-up emails are sent by the correct, active user.
Original PR description
### Issue: If an archived user is set as the Sales person on an invoice or as the followup responsible on a partner, it will be the one sending the automatic followups. ### Steps to reproduce: - Create a partner and an overdue invoice for this partner - Change the "Salesperson" of the invoice to another user - Archive this user - Accounting > Customer > Followup Reports - Click on the partner created earlier - Click the actions and "Process Automatic Follow-ups" - [17.0] Traceback - [18.0+] The sent message is from the user that was archived ### Cause: `_get_followup_responsible()` does not check is the users it returns are active or not. ### Solution: Create an iterable with all the possibilities and iterate on it to return the first active user in the list. Fallback on `self.env.user`. opw-5153159 Forward-Port-Of: odoo/enterprise#100465 Forward-Port-Of: odoo/enterprise#98807
This pull request resolves a technical issue (runbot error 234028) within the Web Studio module. The fix improves the stability and reliability of Web Studio's automated testing processes, preventing potential disruptions to users' ability to customize their Odoo applications. This ensures a smoother experience for Odoo Enterprise users.
Original PR description
runbot-error-234028
This update fixes an issue where the EC Sales List menu was incorrectly placed within the application views. The menu has now been moved to the data folder, ensuring it appears correctly within the Odoo interface. This improves the user experience for reports related to sales in Ecuador.
Original PR description
The menu record was wrongly stored under views. It is now moved to the data folder.
This update adjusts the appearance of checkboxes in the Enterprise version of Odoo. Previously, checkboxes had sharp corners. This change now utilizes Bootstrap's default border radius, creating a more modern and visually appealing design. This is a minor improvement to the user interface.
Original PR description
Before this commit, checkboxes had square corners with a border radius of 0. This commit removes the override and uses Bootstrap's default border radius value. requires: https://github.com/odoo/odoo/pull/231860 task-5136827
Features or functions removed from Odoo
This update simplifies our testing process by removing outdated nightly tags used to avoid external API calls. Now that mock servers are the standard for carrier simulations, these tags are no longer needed. This change improves test efficiency and reduces potential dependencies on external services.
Original PR description
The purpose of nightly tags was to avoid calling external API during every test. But now mostly mock servers are used to simulate the carrier response. For those tests, we should run them in standard test mode. Also removed useless tags and added data (instead of using demo data). Task: 4613407
This update corrects a minor issue where the stock barcode module was applying a double weight calculation, leading to inaccurate inventory tracking. The change removes this redundant assignment, ensuring more precise stock levels. This fix improves the reliability of barcode scanning data within the Odoo Enterprise system.
Original PR description
Added accidentally here odoo/odoo#77183.
Code cleanup and technical improvements
This update reorganizes Odoo's code to improve consistency. The IoT-related data service for customer displays has been moved to the `pos_iot` module. This change simplifies the codebase and supports future development of IoT features within the point-of-sale system.
Original PR description
For consistency reasons, the IoT related code in customer display data service was moved to `pos_iot`. odoo/odoo#237545