Daily updates from Odoo
Friday, November 28, 2025
32 changes · master
New functionality added to Odoo
This update adds a new report for declaring employee absences (DECMAL) to the government, streamlining the process for reporting sick leave or incapacitation. It also consolidates reporting functionalities, replacing a previous wizard and now allowing the generation of both absence and salary reports from a single tool. This simplifies reporting and ensures compliance with Luxembourg regulations.
Original PR description
Added the new DECMAL report (Déclaration d'Incapacité de Travail – Maladie), used to declare employee absence or incapacity data to the government . This report handles both new declarations and corrections to previously submitted data. Removed the old wizard to generate the monthly salary declaration(DECSAL). This new wizard now supports generating both DECMAL (employee incapacity) and DECSAL (salary) reports from a single interface task-4737317
Enhancements to existing features
This update ensures that CFDI credit notes for point-of-sale orders are properly linked to their corresponding accounting reversal entries. This change aligns with legal requirements for fiscal document audits, creating a more robust and auditable accounting process for Mexican sales transactions.
Original PR description
As a legal requirement, fiscal documents requires to have its own accounting entry to reference it for audits. This is not the case for pos orders credit notes Currenty, a reversal move is created each time an invoice is created for a pos order of a closed session. Also if the order was globally invoiced, a cfdi credit noted is create to undo the global invoice. This commit makes the virtual relation between the reversal entry created and the cfdi credit notes documents created on the pos order target: master task-4856009
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 significantly speeds up the process of regenerating employee attendance records, a task previously taking 20 seconds for 100 employees. The optimization reduces the number of database queries from 55,000 to just 750, resulting in a much faster execution time of 2 seconds. This improves overall system responsiveness and efficiency.
Original PR description
Forward-Port-Of: odoo/enterprise#100156
This update simplifies user access to certain settings within various Odoo modules by removing restrictions on writeable fields. This change enhances user experience and flexibility while maintaining security for sensitive data. The changes primarily focus on streamlining access to user-configurable options.
Original PR description
odoo/odoo#231159
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
This pull request introduces work-in-progress development for a new feature to collect barcodes during the website sale process. The changes involve updating the website's sales functionality to integrate with barcode scanning, potentially improving order accuracy and efficiency. This is an initial implementation and requires further refinement.
Original PR description
TODO task-5166559 See also: - https://github.com/odoo/odoo/pull/235386
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 fixes an issue where documents and moves were incorrectly linked across companies in a multi-company setup. By explicitly including the company ID, the system now accurately creates and searches for documents within the correct company context, preventing errors and ensuring data integrity. This improves the reliability of financial reporting and move management.
Original PR description
Behavior before: In a multi-company setup, fetching documents could include records from different companies based on VAT numbers. When creating attachments or searching for existing moves, the company ID was not properly considered, leading to incorrect company assignments and failed move creation. Behavior after: Documents and moves are now created and searched within the correct company context by explicitly including the company ID. Root Cause: The company ID was missing in both the attachment creation and the domain used to search for existing moves, causing cross-company mismatches. opw-4929985 Forward-Port-Of: odoo/enterprise#99192
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 fixes an issue where time logs were incorrectly assigned to the user marking work orders as complete, instead of the assigned employee. Now, time logs accurately reflect the employee who actually worked on the order, improving data accuracy and reducing user confusion. This ensures proper tracking of labor costs.
Original PR description
## **Issue Before This Commit:** When a work order is assigned to an employee (not linked to the current user), and the current user marks it as done, the time log is wrongly created under the…
## **Issue Before This Commit:** When a work order is assigned to an employee (not linked to the current user), and the current user marks it as done, the time log is wrongly created under the current user’s employee instead of the assigned one. This behavior caused confusion for the user as the wrong person was shown as working on the order. ## **Steps to Reproduce:** - Create an MO with work orders and confirm it. - Assign another employee to a work order. - Mark the work order as done with the current user from the work order line. - Open the workorder and notice that the time log is created for the current user’s employee. ## **Cause of the Issue:** The bug was introduced in PR (https://github.com/odoo/enterprise/pull/84790), where the logic for assigning the main employee was overridden, ignoring the case of an already assigned employee. ## **With This Commit:** The time log is now created for the assigned employee, This resolves the confusion by ensuring the right person is tracked on the work order. TaskID: 4983514 Forward-Port-Of: odoo/enterprise#100604 Forward-Port-Of: odoo/enterprise#93378
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 simplifies the process of adding products to the shopping cart on the website. By removing outdated forms and consolidating event handlers, the system is now more efficient and reliable. This change enhances the user experience and streamlines the checkout process.
Original PR description
This PR: - Relies on dataset instead of hidden inputs to provide the necessary info to the cart service, - Removes the useless "add to cart" forms (which were used to add products to the cart in a distant past), - Merges all "add to cart" event handlers into a single one to avoid duplication. task-5116935 Community PR: https://github.com/odoo/odoo/pull/229931
This update corrects a previous issue where VoIP calls ending within a calendar range were not displayed. The change ensures that calls, regardless of their end date, are correctly shown in the calendar view, resolving a bug and improving calendar functionality. This also addresses a related crash during testing.
Original PR description
This restores a feature lost at [1]: a call beginning before the calendar current range but ending inside it was not shown anymore. Indeed the `end_date` became computed from the `duration` instead…
This restores a feature lost at [1]: a call beginning before the calendar current range but ending inside it was not shown anymore. Indeed the `end_date` became computed from the `duration` instead of the other way around, allowing efficient domain manipulation based on the duration. However, it prevented domain manipulation based on the end date, which the calendar view needs. It also just makes sense to allow filtering based on the end date too (even if we judged it less useful when making [1]). A solution could be to store the end date too, but it would be redundant data. This instead allows domain manipulation through a field `compute_sql` definition. At the same time, this does the same thing for the start date: creating a new computed field `effective_start_date`, which is either the call start date or its `create_date`. This allows to entirely remove the domain override needed in the calendar model (combined with the community commit that comes with this one, which makes the calendar now consider records without a set end date but which started within range). Note: the date_delay option of the calendar was removed at [2]. This also fixes a runbot issue during the "click everywhere" test: - Enter VoIP app - Go to calendar - Enter web studio => Crash, because the studio calendar ignores the VoIP custo about the calendar domain and filters on `end_date`. The VoIP custo being gone and filtering on `end_date` restored, this is not a problem anymore. [1]: https://github.com/odoo/enterprise/commit/47300cc462420273dd90d5668f542878b6f73254 [2]: https://github.com/odoo/odoo/commit/40c75d3635b4d0de8fca631e4aebd26a466a8709 task-5350495 runbot-234398
This update streamlines the process of generating SSL certificates for IoT devices. Previously, certificates were only issued to trial users or those with enterprise codes. Now, certificates are automatically generated based on a valid database ID, resolving potential issues in Point Of Sale and ensuring consistent IoT device connectivity.
Original PR description
Note: needs to be merged after the https://github.com/odoo/internal/pull/3858 otherwise iot pairing / certificate generation won't work Currently we are only providing the ssl certificates to the iot users if they are on trial (free certificate first 30 days) or they have an enterprise code in their db. The issue here is that if the iot box doesn't get a new certificate after a trial period they will experience a lot of issues in Point Of Sale where a lot of requests rely on local network and ssl certificates. This PR removes the logic around the enterprise code for the generation of the certificates. Now we always generate a certificate as long as the database has a valid db_uuid registered on our servers. Related Odoo PR: https://github.com/odoo/odoo/pull/232681 Related internal PR: https://github.com/odoo/internal/pull/3858
This update resolves an issue where adding serial numbers to subcontracting manufacturing orders (MOs) through the portal would incorrectly cancel and delete associated work orders, which portal users couldn't manage. The change prevents the creation of work orders for subcontracted MOs, aligning with the correct product structure and improving data consistency.
Original PR description
When adding/changing serial number on a subcontracting MO via portal view, Odoo will cancel and unlink the old MO(s) to recreate new ones. This include cancelling workorders, which a portal user doesn't have access to. Since subcontracted MO should not have workorders because the bom should not have operations, this PR adds a call to `_has_workorders` before searching for workorders. Forward-Port-Of: odoo/enterprise#98611
This 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 corrects a calculation error related to PFA (Pension Funds Account) computations within the Belgian HR payroll module. The fix ensures accurate PFA deductions are processed, improving payroll accuracy and compliance. This change impacts the way PFA contributions are handled.
Original PR description
This commit refactors and fixes the PFA computation. task-5103485 Forward-Port-Of: odoo/enterprise#97978
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 refactors the XLSX import process within Odoo, moving logic from JavaScript to Python for better performance and maintainability. This change reduces the size of the application's code and makes it easier to update and extend the spreadsheet import feature in the future.
Original PR description
At odoo, the first rule of javascript is: do it in python. some reasons are - smaller asset bundle - use standard views/models/orm - more easily extensible - more stable
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